Probleme beim Automatisieren von Sftp mit Expect

1536
Dan S

Ich versuche, die Datenübertragung mit Sftp zu automatisieren.

Ich habe ein hacky erwarten Skript, das die Datendatei greift. Leider wird die Datei während der Übertragung unerwartet abgeschnitten. Wenn ich versucht habe, denselben Befehl von Hand auszuführen, wird immer die gesamte Datei übertragen.

Die erste Zeile meines Expect-Skripts lautet:

spawn sftp -o ConnectTimeout=120 username@boxAddress 

Ich hatte den Eindruck, dass das Setzen von "-o ConnectTimeout = 120" ein Zeitlimit für die Verbindung verhindert, wenn die Verbindung weniger als zwei Minuten dauert.

Was muss ich tun, damit das Skript die gesamte Datei herunterladen kann?

Eine andere, weniger wichtige Frage: Ich würde es vorziehen, mich mit Schlüsseln zu authentifizieren (dies ist jedoch nicht zwingend erforderlich, da ich nur Daten vom externen Server erhalte). Ich glaube nicht, dass ich einen Schlüssel auf diesen externen Server legen könnte (weil er nicht unter meiner Kontrolle steht), aber (als ich FileZilla zum Herstellen einer Verbindung dazu verwendete), habe ich festgestellt, dass FileZilla einen Schlüssel davon akzeptiert hat. Wie kann ich mein Skript so einrichten, dass es diesen Schlüssel verlangt und verwendet?

1

1 Antwort auf die Frage

0
grawity

Sie benötigen kein expectSkript, um nur einige Dateien über SFTP zu packen. Dasselbe kann von der Kommandozeile aus geschehen:

sftp username@boxAddress:/path/to/datafile 

wird datafilein das aktuelle Verzeichnis abgerufen .


Bei der Beantwortung der zweiten Frage (die separat gestellt werden sollte ) verwechseln Sie zwei verschiedene Arten von Schlüsseln.

  • Wenn FileZilla oder ein Schlüssel vom Server sftp akzeptiert wird, handelt es sich um den " Host- Schlüssel", der zur Überprüfung der Identität des Servers verwendet wird .
  • Wenn Sie einen Schlüssel zur Authentifizierung verwenden, handelt es sich um den Benutzerauthentifizierungsschlüssel, der zur Überprüfung Ihrer Identität verwendet wird.

Normalerweise brauchen Sie nicht benötigen keine zusätzliche Kontrolle über den Server diese zu ermöglichen; Fügen Sie einfach Ihren öffentlichen Schlüssel an ~/.ssh/authorized_keys. Dies kann auf beliebige Weise erfolgen, einschließlich SFTP getund put.

Ich brauche ein Skript (muss nicht erwartet werden), um die Sftp-Übertragung zu automatisieren. Derzeit erfolgt dies manuell (von jemandem, der FileZilla verwendet), und ich möchte es automatisch machen. Dan S vor 12 Jahren 0
@DanShriver: Was ich sagen wollte, ist, dass Sie den interaktiven Modus `sftp` nicht innerhalb von 'erwartet' einpacken müssen. Sie können einfach einen einzelnen, nicht interaktiven `sftp'-Befehl aufrufen grawity vor 12 Jahren 0
Das ist ein kleines Problem: Um nicht interaktiv zu arbeiten, muss ich die Tasten verwenden. Ich habe ein Benutzername / Kennwort-Konto für ein Konto, aber es ist nicht ich. Daher kann ich nicht einmal den Ordner /home/username/.ssh überprüfen, um zu sehen, ob sie einen Schlüssel haben. Ich denke, ich muss mir ein Konto für die Box erstellen, von der ich versuche, Daten zu erhalten. Dan S vor 12 Jahren 0
@ DanShriver: Sie können aus technischen oder politischen Gründen nicht "prüfen"? grawity vor 12 Jahren 0
Wenn ich "ls" für dieses Verzeichnis mache, bekomme ich "Erlaubnis verweigert". Ich kann die Eltern sehen / home / Verzeichnis jedoch. Dan S vor 12 Jahren 0
@DanShriver: Können Sie eine Verbindung über interaktives SSH herstellen und `ls -ld` im Verzeichnis` .ssh` ausführen? grawity vor 12 Jahren 0
lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/2494/discussion-between-dan-shriver-and-grawity) Dan S vor 12 Jahren 0
Fixiert mit cURL. Erforderlich, um cURL mit Version> 7.16.0 zu erhalten und mit libssh2 kompiliert zu werden. Dann von "Erwarten" auf "cURL" umgestellt und die Dinge funktionierten. Dan S vor 12 Jahren 0