
Ich möchte eine Verbindung herstellen und eine MySQL-Dump-Datei über ein Terminal mit SFTP oder SCP auf meinen Remote-Server hochladen, indem ich meine SSH-Konfigurationsdatei verwende. Laut der Dokumentation, die ich gefunden habe, sollte ich dazu in der Lage sein:
sftp -F db.sql.gz [email protected] /tmp
Ich habe auch den Alias in meiner Konfiguration ausprobiert:
sftp -F db.sql.gz myalias /tmp
Wenn ich die beiden oben genannten Schritte ausführe, erhalte ich einfach einen Ausdruck der möglichen Befehle, -F
wobei es sich um einen davon handelt.
Ich kann bereits problemlos eine Verbindung über SSH herstellen, indem ich die Verknüpfung in meiner lokalen Konfiguration verwende, also weiß ich, dass das funktioniert:
ssh myalias
Notiz: Ich verbinde mich mit einem privaten/öffentlichen Schlüsselpaar, sodass ich nie ein Passwort eingeben muss. Dem Schlüsselpaar ist zwar eine Passphrase zugeordnet, aber OS X Keychain hat sich diese beim ersten Verbinden gemerkt.
Ich bin also nicht sicher, was ich falsch mache?
Antwort1
Aus dem Hilfetext: "
... [-F ssh_config] ...
"Dem oben Gesagten zufolge
-F
wird ein Argument erwartet: der Pfad zu einer OpenSSH-Konfigurationsdatei~/.ssh/config
oder Ähnliches. Aber Sie geben stattdessen einen gzippten SQL-Dump.Da plain
ssh myalias
bereits funktioniert, benötigen Sie die Option hier nicht einmal-F
.sftp myalias
Stellen Sie einfach eine Verbindung zum Server her.Der OpenSSH-Client unterstützt jedoch
sftp
nicht das Hochladen von Dateien, wie Sie es versuchen; er kann nur Dateien herunterladen (mit der Syntaxhost:path
) oder im interaktiven Modus arbeiten. Zum Hochladen müssen Sie entweder den interaktiven Modus verwenden...$ sftp myalias sftp> cd /tmp sftp> put db.sql.gz
...oder das
scp
Werkzeug:scp db.sql.gz myalias:/tmp
oder
scp db.sql.gz [email protected]:/tmp
(sftp verfügt über einen Batchmodus, in dem es mithilfe von Befehle aus einer Datei lesen kann, für einzelne Uploads -b
ist dieser Modus jedoch einfacher zu verwenden scp
.)
Es gibt auch andere SFTP-Clients –lftpeignet sich gut für die interaktive Nutzung, währendLockekann einfacher zu automatisieren sein. Für Backups und dergleichen können Sie auch verwendenrsync(das sein eigenes Protokoll ausführt, aber immer noch innerhalb von SSH).
Antwort2
Das Problem wird durch die ForwardAgent-Konfiguration wie unten beschrieben verursacht.
Host dockervm
HostName x.x.x.x
User root
Preferredauthentications publickey
ForwardAgent yes
In meinem Fall lag es am „ForwardAgent“ in der SSH-Konfiguration, der den SCP zum Hängen brachte. Nachdem ich es auskommentiert hatte, hat es bei mir funktioniert.
Sie könnten auch eine Kopie der Datei mit der kommentierten ForwardAgent-Zeile haben und scp -F verwenden, um sie zum Laufen zu bringen.