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 suauf dem Server eine neue Shell gestartet, anstatt nachfolgende Befehle im Skript als root auszuführen. Sie müssen entweder sudooder verwenden su -cund die TTY-Zuweisung zu SSH mit dem -tSwitch 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 sudoRegel 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 NOPASSWDRegel für Ihren Benutzer in/etc/sudoers würde den Prozess noch reibungsloser gestalten.
Ich hoffe das hilft :-)