SFTP arbeitet nicht durch ein Unix-Shell-Skript

473
Mr BB

Ich versuche, SFTP über ein Unix-Shell-Skript auszuführen und den Fehler zu erhalten

Host key verification failed. Connection closed 

Jedoch wenn ich sftp manuell wie unten mache, funktioniert es

sftp -b batch_file user@remoteserver 

batch_fileenthält lcd, cdund putBefehle.

Skript:

#get inputs parameters file=$1 dir=$2 sftp_node=$3 dest_dir=$4 dol=$  original_dir='eval echo $dol$dir' dest_dir='eval echo $dol$dest_dir'  cd $original_dir sfile='ls -lt $* | head -1'  #To execute sftp in batch mode  rm $SCRIPTDIR/sftp_batch_file.txt  echo "lcd $original_dir" > $SCRIPTDIR/sftp_batch_file.txt echo "cd $dest_dir" >> $SCRIPTDIR/sftp_batch_file.txt echo "put $sfile " >> $SCRIPTDIR/sftp_batch_file.txt  sftp -oPort=56050 -b $SCRIPTDIR/sftp_batch_file.txt user@servername s=$?  if [ $s -eq 0] then  echo "$original_dir/$sfile sent to $dest_dir/$sfile on server" exit 0 fi 

Manuelles Laufprotokoll:

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Konfigurationsdaten lesen / etc / ssh / ssh_config debug1: Anwenden von Optionen für * debug1: Verbindung zu Server [123.456.789.000] Port 12345. Debug1: Verbindung hergestellt. debug1: Identitätsdatei /home/.ssh/id_rsa Typ 1 debug1: Identitätsdatei /home/.ssh/id_rsa-cert type -1 debug1: Identitätsdatei /home/.ssh/id_dsa type -1 debug1: Identitätsdatei / home / .ssh / id_dsa-cert type -1 debug1: Identitätsdatei /home/.ssh/id_ecdsa type -1 debug1: Identitätsdatei /home/.ssh/id_ecdsa-cert type -1 debug1: Remote-Protokollversion 2.0, Remote-Softwareversion SFTP Server debug1: Keine Übereinstimmung: SFTP Server debug1: Kompatibilitätsmodus für Protokoll 2.0 debug1 aktivieren: Zeichenfolge der lokalen Version SSH-2.0-OpenSSH_5.3 debug1: Nicht angegebener GSS-Fehler. Untergeordneter Code kann weitere Informationen enthalten. Cache-Datei für Berechtigungsnachweise '/ tmp / krb5cc_3732'

debug1: Nicht angegebener GSS-Fehler. Untergeordneter Code enthält möglicherweise weitere Informationen. Die Cache-Datei für Berechtigungsnachweise '/ tmp / krb5cc_3732' wurde nicht gefunden

debug1: SSH2_MSG_KEXINIT hat debug1 gesendet: SSH2_MSG_KEXINIT hat debug1 erhalten: kex: server-> client aes128-cbc hac-sha1 keine debug1: kah: server- : Erwartet, dass SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT gesendetes debug1: erwartet SSH2_MSG_KEX_DH_GEX_REXY debug1: Host '[Server]': 12345 ist bekannt und stimmt mit dem RSA-Host-Schlüssel überein. prokodieren befolgen bestimtieren befolgen befürworten beschaffen begehen befehlen befolgen befehlen befolgen befehlen befolgen befolgen befehlen befolgen befehlen befolgen 3 3 4 3 3 4 3 4 4 4 4 |, keyboard-interactive debug1: Nächste Authentifizierungsmethode: publickey debug1: Bietet einen öffentlichen Schlüssel: /home/.ssh/id_rsa debug1: Der Server akzeptiert den Schlüssel: pkalg ssh-rsa blen 277 debug1: Lesen Sie den privaten PEM-Schlüssel. Done: type RSA debug1: Authentifizierung erfolgreich (publickey). debug1: channel 0: new [client-session] debug1: Eingabe einer interaktiven Sitzung. debug1: Sendeumgebung. debug1: Senden von env LANG = de_DE.UTF-8 debug1: Senden des Subsystems: sftp sftp> lcd sftp> cd sftp> Dateiname hochladen Dateiname in / Dateiname hochladen debug1: client_input_channel_req: channel 0 rtype exit-status antworten 0 debug1: channel 0 frei : client-session, nchannels 1 debug1: fd 0 löschen O_NONBLOCK Übertragen: 4832 gesendet, 2696 Bytes empfangen, in 0,6 Sekunden Bytes pro Sekunde: gesendet 8159.3, empfangen 4552.4 Debug1: Beendigungsstatus 0 Authentifizierung erfolgreich (Publickey). debug1: channel 0: new [client-session] debug1: Eingabe einer interaktiven Sitzung. debug1: Sendeumgebung. debug1: Senden von env LANG = de_DE.UTF-8 debug1: Senden des Subsystems: sftp sftp> lcd sftp> cd sftp> Dateiname hochladen Dateiname in / Dateiname hochladen debug1: client_input_channel_req: channel 0 rtype exit-status antworten 0 debug1: channel 0 frei : client-session, nchannels 1 debug1: fd 0 löschen O_NONBLOCK Übertragen: 4832 gesendet, 2696 Bytes empfangen, in 0,6 Sekunden Bytes pro Sekunde: gesendet 8159.3, empfangen 4552.4 Debug1: Beendigungsstatus 0 Authentifizierung erfolgreich (Publickey). debug1: channel 0: new [client-session] debug1: Eingabe einer interaktiven Sitzung. debug1: Sendeumgebung. debug1: Senden von env LANG = de_DE.UTF-8 debug1: Senden des Subsystems: sftp sftp> lcd sftp> cd sftp> Dateiname hochladen Dateiname in / Dateiname hochladen debug1: client_input_channel_req: channel 0 rtype exit-status antworten 0 debug1: channel 0 frei : client-session, nchannels 1 debug1: fd 0 löschen O_NONBLOCK Übertragen: 4832 gesendet, 2696 Bytes empfangen, in 0,6 Sekunden Bytes pro Sekunde: gesendet 8159.3, empfangen 4552.4 Debug1: Beendigungsstatus 0

Skriptlaufprotokoll:

OpenSSH_7.5p1, OpenSSL 1.0.2m 2 Nov 2017 debug1: Konfigurationsdaten lesen / etc / ssh / ssh_config debug1: init_func_ptrs success debug1: Wert von krb5 ist 1 debug1: Wert von gssapi ist 1 debug1: Verbindung mit Server [123.456.789.000] Port 12345. debug1: Verbindung hergestellt. debug1: key_load_public: Keine solche Datei oder Verzeichnis. debug1: Identitätsdatei /home.ssh/identity type -1 debug1: key_load_public: Keine solche Datei oder Verzeichnis. debug1: Identitätsdatei /home.ssh/identity-cert type -1 debug1: Kompatibilität aktivieren Modus für Protokoll 2.0 debug1: Lokale Versionszeichenfolge SSH-2.0-OpenSSH_7.5 debug1: Remote-Protokollversion 2.0, Remote-Softwareversion SFTP-Server debug1: keine Übereinstimmung: SFTP-Server debug1: Authentifizierung an Server: 12345 als 'Benutzer' debug1: SSH2_MSG_KEXINIT gesendet debug1: SSH2_MSG_KEXINIT erhielt debug1: kex: Algorithmus: diffie-hellman-group-exchange-sha256 debug1: kex: host-schlüsselalgorithmus: ssh-rsa debug1: kex: server-> client-verschlüsselung: aes128-cbc MAC: hmac-sha2-256 Komprimierung: keine debug1: kex: client-> Server Chiffre: aes128-cbc MAC: hmac-sha2-256 Komprimierung: keine debug1: SSH2_MSG_KEX_DH_GEX_REQUEST (2048 <8192 <8192) gesendet debug1: got SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT gesendet debug1: got SSH2_MSG_KEX_DH_GEX_REPLY debug1: Server-Host-Schlüssel: ssh-rsa SHA256: U2JlOXEu69uw4l + TGqDBRxnaH + Mjf12WeHc4IGd6lcI debug1: Überprüfung ohne Port-ID Die Überprüfung des Host-Schlüssels ist fehlgeschlagen. Verbindung geschlossen SSH2_MSG_KEX_DH_GEX_REQUEST (2048 <8192 <8192) gesendet debug1: got SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT debug1 gesendet: got SSH2_MSG_KEX_DH_GEX_REPLY debug1: Server-Host-Schlüssel: ssh-rsa SHA256: U2JlOXEu69uw4l + TGqDBRxnaH + Mjf12WeHc4IGd6lcI debug1: Prüfen, ohne Host-Schlüsselverifikations Port-Kennung fehlgeschlagen. Verbindung geschlossen SSH2_MSG_KEX_DH_GEX_REQUEST (2048 <8192 <8192) gesendet debug1: got SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT debug1 gesendet: got SSH2_MSG_KEX_DH_GEX_REPLY debug1: Server-Host-Schlüssel: ssh-rsa SHA256: U2JlOXEu69uw4l + TGqDBRxnaH + Mjf12WeHc4IGd6lcI debug1: Prüfen, ohne Host-Schlüsselverifikations Port-Kennung fehlgeschlagen. Verbindung geschlossen

Bitte helfen Sie mir, das Problem zu identifizieren und zu beheben.

-1
Ich habe Sie bereits gefragt (https://stackoverflow.com/q/52929915/850848#comment92769549_52929915), um Details zu Ihrem * "Unix-Shell-Skript" * zu posten. Martin Prikryl vor 5 Jahren 0
Wenn Sie eine Antwort erwarten, sollten Sie weitere Details angeben. RalfFriedl vor 5 Jahren 0
Wenn Sie * "sftp manuell ausführen" *, verwenden Sie nicht "-oPort = 56050". Martin Prikryl vor 5 Jahren 0
Wenn ich oPort nicht sehe, wird ein Fehler ausgegeben, da dieser Port # nur zulässig ist. selbst manuell habe ich oPort verwendet Mr BB vor 5 Jahren 0
Bearbeiten Sie Ihre Frage, um das zu zeigen. In Ihrem manuellen Befehl ist in der Frage kein "oPort" enthalten. Martin Prikryl vor 5 Jahren 0
Fügen Sie auch den Schalter "-v" zu "manual" und "sftp" hinzu und zeigen Sie uns deren Ausgabe. Martin Prikryl vor 5 Jahren 0
Meine Frage wurde mit den -v-Protokollen aktualisiert. Bitte prüfe. Ich sehe da einige Unterschiede Mr BB vor 5 Jahren 0
Führen Sie es sogar manuell und in einem Skript auf demselben Rechner * aus? Weil jeder Lauf eine andere Version von OpenSSH verwendet. Martin Prikryl vor 5 Jahren 0
Ja, ich habe diesen Unterschied in den Versionen gefunden. Ich arbeite jedoch auf demselben Computer sowohl manuell als auch Skript. Wird es einen Unterschied zu den Skripts .sh und .ksh machen? Mr BB vor 5 Jahren 0
Was bekommen Sie von "which sftp" in Shell und Script? Martin Prikryl vor 5 Jahren 0
Ja..! Ich habe jetzt wieder nachgesehen. Die Maschinen sind unterschiedlich und auch die Shebang-Linie musste korrigiert werden. Mr BB vor 5 Jahren 0

1 Antwort auf die Frage

0
Ohad Cohen

Wie authentifizieren Sie sich beim Server? Der sftp-Batch-Modus kann nicht mit interaktiven Authentifizierungsmethoden verwendet werden (er wird nicht zur Eingabe von Benutzernamen und Kennwörtern aufgefordert. Sie müssen in der Befehlszeile Anmeldeinformationen angeben.)

Wenn Ihr SFTP Passwort verwendet, führen Sie Folgendes aus:

sftp -b batch_file user:password@remoteserver 
Ich wollte das SFTP machen, ohne das Passwort im Skript fest zu codieren. Ich habe mein Skript wie folgt geändert: sftp user @ server << EOF; lcd source_dir; cd dest_dir; Datei ablegen; EOF Mr BB vor 5 Jahren 0