Führen Sie den Befehl in einer SFTP-Verbindung über ein Skript aus

13

Dies ist eine sehr grundlegende Frage, die ich noch nicht richtig verstanden habe. Googeln brachte mich leider nicht weiter.

Mein Ziel ist es, mit sftp eine Verbindung zu einem Server herzustellen, eine Datei hochzuladen und dann die Verbindung zu trennen.

Ich habe das folgende Skript:

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins

#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar

exit

Das Problem ist, dass dieses Skript eine SFTP-Verbindung herstellt und dann nichts unternimmt. Nachdem ich exit in connection manuell eingegeben habe, wird versucht, den Befehl put auszuführen. Da die SFTP-Sitzung jedoch geschlossen wurde, wird nur put: command not found angezeigt.

Wie kann ich dafür sorgen, dass das richtig funktioniert?

Vielen Dank

kalenpw
quelle

Antworten:

14

Sie können Ihr Skript so ändern, dass Befehle in einem Here-Dokument übergeben werden, z.

#!/bin/bash

sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar   
exit
EOF

Die <<Markierung gefolgt von dem Namen ( EOF) weist das Skript an, die folgenden Zeilen zu übergeben, bis der Name am Anfang der Zeile gefunden wird (für sich allein).

Thomas Dickey
quelle
Super, das hat genau das getan, was ich brauchte. Ich werde hier Dokumente nachlesen müssen. Vielen Dank für die schnelle Antwort, ich akzeptiere sie in 8 Minuten.
Kalenpw
Kein Problem (Ich habe nach einem Duplikat gesucht, aber nur eines als "unklar" geschlossen gefunden).
Thomas Dickey
Sind Sie sicher, dass der Server die Kommentare des Shell-Skripts nicht verschluckt?
alk
Auch dieser Ansatz hängt von der Art der Schale ab.
alk
@Alk das Skript funktioniert mit und ohne Kommentare
kalenpw
5

Möglicherweise bevorzugen Sie die Verwendung scpvon sftp. scpVerhält sich ähnlich wie der normale cpBefehl, aber die Dateien können remote sein:

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar [email protected]:/home/kalenpw/TestWorld/plugins

Dadurch wird die Datei auf Ihrem lokalen Computer in ein Verzeichnis auf dem Remotecomputer kopiert, ohne dass die alte FTP-Befehlsschnittstelle verwendet werden muss.

Die ssh, scpund sftpDienstleistungen sind in der Regel , wenn eine von ihnen sind; Das gleiche Daemon-Programm stellt alle gleichzeitig bereit. Grundsätzlich kann der Administrator des Servers eine der beiden Optionen deaktivieren. In der Praxis ist dies jedoch recht selten.

db48x
quelle
Wusste vorher nicht, dass scp sehr nützlich ist. Und du scp
hattest
4

Sie können auch die -bOption verwenden sftp, um eine Datei anzugeben, die Befehle für enthält sftp.

Sie können beispielsweise alle Ihre Befehle in eine Datei einfügen sftp_commands.txt:

cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit

und laufe sftpals:

sftp -oPort=23 -b sftp_commands.txt [email protected]:/home/kalenpw/TestWorld/plugins 

Oder Sie können die Befehle auch über STDIN übergeben, wenn Sie keine Datei verwenden möchten.

Von man sftp:

-b Batchdatei

Der Stapelmodus liest eine Reihe von Befehlen aus einer Eingabestapeldatei anstelle von stdin. Da es keine Benutzerinteraktion gibt, sollte es in Verbindung mit nicht interaktiver Authentifizierung verwendet werden. Eine Batchdatei mit '-' kann verwendet werden, um die Standardeingabe anzuzeigen. sftp bricht ab, wenn einer der folgenden Befehle fehlschlägt: get, put, reget, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink und lmkdir. Die Beendigung bei Fehlern kann befehlsbezogen unterdrückt werden, indem der Befehl mit einem '-' Zeichen vorab festgelegt wird (z. B. -rm / tmp / blah *).

heemayl
quelle
1

Eine andere Möglichkeit wäre die Verwendung von Curl :

curl -u user -T file.tar sftp://example.com/home/user/
Pere
quelle