Wie lösche ich eine Datei auf einem Remote-Computer über SSH mithilfe eines Shell-Skripts?

32

Ich schreibe ein Shell-Skript, in dem ich eine Datei auf einem Remote-Computer über ein Shell-Skript löschen muss.

Manuell fließen:

ssh username@domain.com

.. dann bei domain:

cd ./some/where
rm some_file.war

Wie kann man diese Aufgabe erfüllen?

mico
quelle

Antworten:

49

Sie können dem sshClient einen auszuführenden Befehl übergeben, anstatt eine Shell zu starten, indem Sie ihn an den Befehl ssh anhängen.

ssh username@domain.com 'rm /some/where/some_file.war'

Sie müssen nicht cdan einen Ort, um etwas zu entfernen, solange Sie den vollständigen Pfad angeben. Dies ist also ein weiterer Schritt, den Sie überspringen können.

Die nächste Frage ist die Authentifizierung. Wenn Sie das nur ausführen, werden Sie aufgefordert, ein Kennwort einzugeben. Wenn Sie dies nicht interaktiv eingeben möchten, sollten Sie die öffentliche Authentifizierung einrichten.

Caleb
quelle
3
Ich dachte -c wäre cipher_spec - nein? Ich hätte nicht gedacht, dass -c für die Befehlsübergabe erforderlich ist.
Scott C Wilson
Vielen Dank an alle für die schnellen Antworten. Diese Antwort enthielt die meisten Teile der Lösung, so dass diesmal @Caleb das Häkchen bekam.
Mico
Sollten wir -fzur rmAusführung von Remote-Aufrufen hinzufügen ?
Fedir RYKHTIK
1
@Fedir NEIN! Bei der Frage wird speziell nach Dateien und nicht nach Verzeichnissen gefragt, und wenn von rmihnen Warnungen oder Fehler ausgegeben werden , sollten diese auf jeden Fall an den Anrufer weitergeleitet werden, es sei denn, der Benutzer weiß, was ihn erwartet und warum er etwas außer Kraft setzt. Viele Fehler und späteres frustrierendes Debuggen können vermieden werden, indem Sie nur die Optionen verwenden, die Sie in einem bestimmten Szenario benötigen.
Caleb
1
@Fedir Die -fOption to rmist --forceeine Abkürzung für und bewirkt, dass für nicht vorhandene Dateien oder falsche Argumente Fehler ausgegeben werden. Normalerweise werden Befehle über nicht interaktive Shells ausgeführt, die standardmäßig ohnehin weniger interaktiv sind. Wenn dies jedoch nicht der Fall ist oder Sie eine interaktive Eingabeaufforderung erhalten, müssen Sie die Einstellungen korrigieren, die in direktem Zusammenhang damit stehen. Wenn Sie dieses Skript schreiben, sollten Sie dieses Problem ohnehin nicht haben, und wenn Sie sich in einer interaktiven Shell befinden (in der die Möglichkeit von katastrophalen Tippfehlern besteht), sollten Sie -Ion verwenden --interactive=never, um das gewünschte Verhalten festzulegen.
Caleb
3

Wenn Sie eine entfernte Datei mit sudo löschen möchten, müssen Sie Folgendes ausführen:

ssh -tt user@host 'stty raw -echo; sudo rm /path/to/file' < <(cat)

Einzelheiten .

Vladislav Rastrusny
quelle
2

Der Befehl ssh verfügt über einen Befehlsparameter (letzter Parameter im Befehl), mit dem Sie Remote-Befehle ausführen können.

Scott C Wilson
quelle