Ich muss eine Protokolldatei mit SFTP von einem Linux-Host auf einen Remote- Host übertragen. Ich habe von meiner Betriebsgruppe entsprechende Anmeldeinformationen erhalten. Da ich jedoch keine Kontrolle über einen anderen Host habe, kann ich keine RSA-Schlüssel generieren und für den anderen Host freigeben.
Gibt es also eine Möglichkeit, den sftp
Befehl (mit dem angegebenen Benutzernamen / Passwort) über einen Cron- Job im Bash-Skript auszuführen ?
Ich habe eine ähnliche Frage zum Stapelüberlauf gefunden: Geben Sie das Kennwort für sftp in einem Bash-Skript an , aber es gab keine zufriedenstellende Antwort auf mein Problem.
SSHPASS=password sshpass -e ...
sollte tun.sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
war das entscheidende fehlende Stück für mich.Ein anderer Weg wäre, lftp zu verwenden:
Der Nachteil dieser Methode ist, dass andere Benutzer auf dem Computer das Kennwort von Tools wie lesen können
ps
und dass das Kennwort Teil Ihres Shell-Verlaufs werden kann.Eine sicherere Alternative, die seit LFTP 4.5.0 verfügbar ist, besteht darin, die
LFTP_PASSWORD
Umgebungsvariable festzulegen und lftp mit auszuführen--env-password
. Hier ist ein vollständiges Beispiel:LFTP enthält auch eine coole Spiegelungsfunktion (kann das Löschen nach bestätigter Übertragung beinhalten
--Remove-source-files
):quelle
put-script
:open sftp://user:password@host; put local-file.name; exit
Als Ausführen Auflftp -f put-script
diese Weise müssen Sie den Benutzernamen und das Kennwort nicht in einer Befehlszeile haben und können restriktive Berechtigungen für Ihre Skriptdatei einrichten.lftp
als mitsftp
und herumzuspielensshpass
. Gute Antwort.Expect ist ein großartiges Programm.
Unter Ubuntu installieren Sie es mit:
Installieren Sie es auf einem CentOS-Computer mit:
Nehmen wir an, Sie möchten eine Verbindung zu einem SFTP-Server herstellen und dann eine lokale Datei von Ihrem lokalen Computer auf den Remote-SFTP-Server hochladen
Dies öffnet eine SFTP-Verbindung mit Ihrem Passwort zum Server.
Dann geht es in das Verzeichnis, in das Sie Ihre Datei hochladen möchten, in diesem Fall "logdirectory".
Dadurch wird eine Protokolldatei aus dem lokalen Verzeichnis unter / var / log / mit dem Dateinamen file.log in das "Protokollverzeichnis" auf dem Remoteserver hochgeladen
quelle
Sie können lftp interaktiv in einem Shell-Skript verwenden, damit das Kennwort nicht in .bash_history oder ähnlichem gespeichert wird. Gehen Sie dazu wie folgt vor:
Fügen Sie Ihrer Datei Folgendes hinzu:
Und schreiben / beenden Sie den vi-Editor, nachdem Sie den Host, den Benutzer, den Pass und das Verzeichnis für die Eingabe Ihrer Put-Datei
:wq
bearbeitet haben. Machen Sie dann Ihr Skript ausführbarchmod +x test_script.sh
und führen Sie es aus./test_script.sh
.quelle
Ich wurde kürzlich gebeten, von FTP auf SFTP umzuschalten, um die Dateiübertragung zwischen Servern zu sichern. Wir verwenden das Tectia SSH-Paket, mit dem Sie
--password
das Kennwort in der Befehlszeile übergeben können.Beispiel:
sftp --password="password" "userid"@"servername"
Chargenbeispiel:
Ich dachte, ich sollte diese Informationen teilen, da ich mir verschiedene Websites angesehen habe, bevor ich den Hilfebefehl (
sftp -h
) ausführte , und war überrascht, die Kennwortoption zu sehen.quelle
ps
Befehl ausführt, kann Ihr Kennwort sehen.unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
Sie können überschreiben, indem Sie die Authentifizierung ohne Kennwort aktivieren. Aber Sie sollten Schlüssel (pub, priv) installieren, bevor Sie sich dafür entscheiden.
Führen Sie die folgenden Befehle auf dem lokalen Server aus.
Drücken Sie die EINGABETASTE, um alle angeforderten Optionen anzuzeigen. Es müssen keine Werte eingegeben werden.
Stellen Sie mit dem folgenden Befehl eine Verbindung zum Remote-Server her
Führen Sie die folgenden Befehle auf dem Remote-Server aus
Führen Sie den folgenden Befehl auf dem lokalen Server aus, um die Authentifizierung ohne Kennwort zu testen. Es sollte ohne Passwort verbunden sein.
quelle
lftp -p ${port} -u ${login_id},${password} ${ip_number}
wenn er von einem Shell-Skript aufgerufen wird, irgendwo gedruckt? Wie haben Sie außer sshpass gelöst?lftp
und verlasse mich nicht aufsshpass
Mac und Linux.Kombinieren Sie sshpass mit einer gesperrten Anmeldeinformationsdatei und in der Praxis ist es so sicher wie alles andere. Wenn Sie root auf der Box haben, um die Anmeldeinformationsdatei zu lesen, sind alle Wetten sowieso deaktiviert.
quelle
Bash-Programm, um darauf zu warten, dass sftp nach einem Passwort fragt, und es dann mitzusenden:
Möglicherweise müssen Sie erwartungsgemäß installieren und den Wortlaut von 'Passwort' in Kleinbuchstaben 'p' ändern, um dem zu entsprechen, was Ihre Eingabeaufforderung erhält. Das Problem hierbei ist, dass Ihr Kennwort sowohl in der Datei als auch im Befehlsverlauf im Klartext angezeigt wird. Was den Zweck, ein Passwort zu haben, fast zunichte macht.
quelle
Sie können sshpass dafür verwenden. Unten sind die Schritte
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
quelle