ftp unterstützt den put "|..." "remote-file.name"
Befehl, Daten an eine ftp-Verbindung weiterzuleiten. Gibt es etwas Ähnliches für SFTP?
In SFTP erhalte ich folgenden Fehler:
sftp 'jmw@backupsrv:/uploads'
sftp> put "| tar -cx /storage" "backup-2012-06-19--17-51.tgz"
stat | tar -cv /storage: No such file or directory
Wie oben führt der SFTP-Client den Befehl offensichtlich nicht aus.
Ich möchte den Pipe-Befehl verwenden, um den Dateistream direkt nach SFTP umzuleiten. (weil nicht mehr genügend Speicherplatz vorhanden ist, um eine Sicherungsdatei auf derselben Festplatte zu erstellen, bevor sie auf den SFTP-Server hochgeladen wird.)
Antworten:
Da dies das erste Ergebnis ist, das Sie durch Googeln für diese Frage finden und das noch nicht erwähnt wurde, füge ich die Lösung hinzu, die ich auch hier gefunden habe:
Sie können hierfür die Curls-SFTP-Implementierung verwenden. Da curl wahrscheinlich bereits auf vielen Systemen installiert ist, wird dies möglicherweise der Lösung mit benutzerdefinierten Clients vorgezogen.
Anwendungsbeispiel:
curl
verwendet Ihre.ssh/known_hosts
Datei zur Schlüsselüberprüfung. Dies kann fehlschlagen, wenn Ihr SSH-Client neuere Verschlüsselungsstandards verwendet, die von der in curl verwendeten Bibliothek nicht unterstützt werdenUm dies zu beheben, können Sie die anderen Schlüsseltypen mit dem folgenden Befehl zur bekannten Hosts-Datei hinzufügen:
oder Sie können die Schlüsselüberprüfung mithilfe des
-k
Flags deaktivieren (das würde ich allerdings nicht empfehlen).quelle
Ich hatte viel Spaß daran, eine Lösung für dieses Problem zu finden. Es erfordert das Tool nc (netcat) auf beiden Computern und SSH (SFTP wird nicht benötigt).
In diesem Beispiel werde ich den Computer aufrufen, der die Daten enthält, die zum Sichern von Linux-a benötigt werden, und den Computer, der das Backup von Linux-b empfangen muss.
Lassen Sie Netcat unter Linux-a einen Port abhören (ich habe 2000 genommen) und leiten Sie ihn in eine Datei um. Dies wird einfach dort sitzen und warten, bis etwas an diesem Port durchkommt.
Öffnen Sie unter Linux-B einen SSH-Tunnel zu Linux-A, ich habe wieder Port 2000 verwendet. Dadurch wird alles, was Sie auf TCP-Port 2000 auf localhost werfen, auf TCP-Port 2000 unter Linux-a umgeleitet, wo Netcat lauscht.
Erstellen Sie nun das Tar-Archiv, senden Sie die Ausgabe jedoch an stdout (mit -) und leiten Sie sie zur Komprimierung an gzip weiter. Leiten Sie das nun an einen anderen Netcat weiter, der es an Localhost auf TCP auf Port 2000 sendet.
Wir sind fertig! Unter Linux-b hört der Netcat nicht mehr zu und eine neue Datei wird erstellt. Das Beste daran ist, dass das Tar-Archiv nie auf der Festplatte von Linux-A abgelegt wurde.
Ich weiß, dass es nicht genau das ist, wonach Sie in der Frage gefragt haben, aber wenn Sie Netcat zur Verfügung haben, ist es eine praktikable Lösung für Ihre Art von Problem.
Bearbeiten: Ich habe eines vergessen: Wenn Sie diese Anweisungen befolgen, haben Sie immer noch einen SSH-Tunnel unter Linux-a. Finden Sie heraus, wie die Prozess-ID lautet, und beenden Sie sie.
quelle
output-stream-generating-command | ssh user@remotehost 'input-stream-accepting-command'
ist eine Option, wenn Ihr Remote-Benutzer eine gültige Shell hat.quelle
this
stattdessen." - Das scheint mir eine dieser Zeiten zu sein.S
Weiterleiten an einen Befehl auf dem Remote-System unterstützt (wahrscheinlich, weil dies das Ecure-Bit besiegen würde, indem jemand hineingelassen würde Ihre Situation, in der ohnehin keine Shell ausgeführt wird). Ich könnte mich jedoch irren - ich bin hauptsächlich mit der SFTP-Funktionalität in OpenSSH und dem proprietären SSH-Server vertraut, den Sun für denvoretaq7 wies darauf hin, dass der sftp-client keine leitungsdatenübertragung für benutzer unterstützt, die sftp nur zur verbindung mit dem server verwenden dürfen.
Zum Glück gibt es libssh2, das SFTP unterstützt. Wir brauchen also nur 2 andere Clients, die libssh2 verwenden und die ich aufgerufen habe:
Der Quellcode befindet sich unter der folgenden URL: http://www.qxs.ch/2012/07/05/sftp-upload-tool/
Da ich nicht so viel Erfahrung mit libssh2-Programmierung habe, freue ich mich über jede Rückmeldung zum Quellcode.
quelle