it-swarm.com.de

Datei mit Befehlen im Shell-Skript auf FTP-Server hochladen?

Ich möchte eine Datei von meinem Linux-Server auf einen FTP-Server hochladen. Ich weiß, dass wir die Befehle put und get verwenden, um Dateien hoch- und herunterzuladen, und den Befehl sftp, um eine Verbindung zum FTP-Server herzustellen.

Aber ich wollte das alles in einem Shell-Skript erledigen und habe keine Ahnung, wie ich mit dem Befehl sftp in einem Skript eine Verbindung zu FTP herstellen soll, um eine Datei hochzuladen. Dies ist, was ich weiß, aber ich weiß nicht, wie es in einem sh-Skript funktionieren wird.

sftp -v -oIdentityFile=path [email protected]
put localPath ftpPath

Kann mir jemand helfen?

8
Elvin

sftp ist ein Shell-Befehl. Es liest SFTP-Befehle an seiner Standardeingabe.

Sie können ein hier Dokument verwenden, um Eingaben an einen Befehl zu übergeben.

sftp -v -oIdentityFile=path [email protected] <<EOF
put localPath ftpPath
EOF

Sie können Variablen im hier gezeigten Dokument verwenden.

local_path=/path/to/local/file
remote_path=/somewhere/or/other
sftp -v -oIdentityFile=path [email protected] <<EOF
put $local_path $remote_path
EOF

Dies ist nicht der einfachste Weg, eine Datei zu kopieren. Mit SFTP können Sie Dateien durchsuchen und übertragen. Es gibt jedoch auch einen Shell-Befehl, mit dem Sie eine Datei (oder sogar ein Verzeichnis rekursiv) direkt kopieren können.

scp -o IdentityFile=path localPath [email protected]:remotePath

Sie können eine Batchdatei mit der Option -b Angeben.

-b batchfile

Aus der SFTP-Manpage herausgerissen:

Der Stapelmodus liest eine Reihe von Befehlen aus einer eingegebenen Stapeldatei anstelle von stdin. Da es keine Benutzerinteraktion gibt, sollte es in Verbindung mit einer nicht interaktiven Authentifizierung verwendet werden. Eine Batchdatei von "-" kann verwendet werden, um die Standardeingabe anzuzeigen. sftp wird abgebrochen, wenn einer der folgenden Befehle fehlschlägt: get, put, umbenennen, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink und lmkdir. Die Beendigung bei einem Fehler kann Befehl für Befehl unterdrückt werden, indem dem Befehl ein "-" vorangestellt wird (z. B. -rm/tmp/blah *).

5
Jeff Smith

Haben Sie darüber nachgedacht, rsync zu verwenden?

Das Hochladen von Dateien über rsync ist wohl die am meisten bevorzugte und auch am einfachsten zu skriptende Methode. Es verwendet entweder SSH, RSH oder ein eigenes Protokoll ("rsync: // ...") für die Ziel- und Quellübertragung.

Es ist mehr als wahrscheinlich, dass rsync auf Ihrem System installiert ist. Wenn Sie über SSH darauf zugreifen können, können Sie die Syntax scp verwenden:

rsync -alPvvz local_path [email protected]:remote_path

Wenn Sie oIdent benötigen, empfehle ich Ihnen, diese unix.SE-Frage zu lesen, wo dies erklärt wird.


Ich verstehe, dass es nicht genau ist, wonach Sie gefragt haben, aber angesichts der Tatsache, dass rsync so ziemlich ein Industriestandard ist, ist es zumindest etwas berücksichtigen.

1
polemon

SFTP-Programme verwenden das SSH-Protokoll, um auf Dateien zuzugreifen, diese zu verwalten und auf Remote-Systeme zu übertragen. Es verwendet verschiedene Protokolle, um Dateien zu übertragen. Die Benutzernamen und die Datenübertragung werden während der Kommunikation verschlüsselt. Sie können den FTP-Client nicht verwenden, um eine Verbindung zum SFTP-Server herzustellen, oder den SFTP-Client, um eine Verbindung zum FTP-Server herzustellen, der nur FTP unterstützt.

0
P4cK3tHuNt3R

Verwenden Sie zum Hochladen von Datei1 auf 127.0.0.1

ftp -u [email protected]: file1

Sie werden aufgefordert, ein Passwort einzugeben. Um dies zu umgehen, können Sie Ihre .netrc ausfüllen:

cd
cat >.netrc<<EOF
machine 127.0.0.1
login user
password password
EOF
chmod 600 .netrc
0
Thorsten Staerk

Wenn Sie SFTP-Zugriff auf den Computer haben, haben Sie möglicherweise auch SSH-Zugriff auf den Computer.

Wenn Sie SSH-Zugriff haben, sollten Sie überprüfen, ob der Befehl rsync verfügbar ist.

rsync hat einige Vorteile gegenüber ftp (sichere Verbindung, lädt nur die Teile der Datei hoch, die sich geändert haben - unter bestimmten Umständen sehr schnell, einfache rekursive Spiegelung, Komprimierung).

https://en.wikipedia.org/wiki/Rsync

Es kann leicht in Shell-Skripten verwendet werden. Sie müssen lediglich die "schlüsselbasierte Authentifizierung" einrichten.

0
Bjoern Mainz