Sie können einen Befehl als Argument an SSH übergeben, um diesen Befehl nur auf dem Server auszuführen, und dann Folgendes beenden:
ssh user@host "command to run"
Dies funktioniert auch für eine Liste mit mehreren Befehlen:
ssh user@host "command1; command2; command3"
Oder alternativ:
ssh user@host "
command1
command2
command3
"
Wie bereits von anderen Benutzern erwähnt, wird beim Ausführen su
auf dem Server eine neue Shell gestartet, anstatt nachfolgende Befehle im Skript als root auszuführen. Sie müssen entweder sudo
oder verwenden su -c
und die TTY-Zuweisung zu SSH mit dem -t
Switch erzwingen (erforderlich, wenn Sie das root-Passwort eingeben müssen):
ssh -t user@host 'su - -c "command"'
ssh -t user@host 'sudo command'
Alles in allem wäre eine Möglichkeit, das zu erreichen, was Sie tun möchten:
#!/bin/bash
ssh -t user@172.1.1.101 "
sudo some_command
sudo service server_instance stop
sudo some_other_command
"
Da Sie sich in der sudo
Regel einige Minuten lang an die Berechtigungsstufe erinnern, bevor Sie erneut nach dem Root-Kennwort gefragt werden sudo
, ist es wahrscheinlich die einfachste Methode, Befehle als Root auf dem Server auszuführen, wenn Sie alle Befehle voranstellen , die Sie als Root ausführen müssen. Hinzufügen einer NOPASSWD
Regel für Ihren Benutzer in/etc/sudoers
würde den Prozess noch reibungsloser gestalten.
Ich hoffe das hilft :-)