Ich muss eine Protokolldatei mit sftp von einem Linux-Host auf einen Remote-Host übertragen. Ich habe die gleichen Anmeldeinformationen von meiner Betriebsgruppe erhalten. Da ich jedoch keine Kontrolle über einen anderen Host habe, kann ich keine RSA-Schlüssel für den anderen Host generieren und freigeben.
Gibt es also eine Möglichkeit, den Befehl sftp
(mit dem angegebenen Benutzernamen/Passwort) über einen cron -Job im Bash-Skript auszuführen?
Ich habe eine ähnliche Frage zum Stapelüberlauf gefunden, Kennwort für sftp in einem Bash-Skript angeben, aber es gab keine zufriedenstellende Antwort auf meine Frage Problem.
Sie haben einige andere Optionen als die Verwendung der Authentifizierung mit öffentlichem Schlüssel:
Wenn Sie sshpass eine Chance geben möchten, finden Sie hier einen funktionierenden Skriptausschnitt:
export SSHPASS=your-password-here
sshpass -e sftp -oBatchMode=no -b - [email protected] << !
cd incoming
put your-log-file.log
bye
!
Ein anderer Weg wäre, lftp zu benutzen:
lftp sftp://user:[email protected] -e "put local-file.name; bye"
Der Nachteil dieser Methode ist, dass andere Benutzer auf dem Computer das Kennwort aus Tools wie ps
lesen können und dass das Kennwort Teil Ihres Shell-Verlaufs werden kann.
Eine sicherere Alternative, die seit LFTP 4.5.0 verfügbar ist, ist das Setzen der Umgebungsvariablen LFTP_PASSWORD
und das Ausführen von lftp mit --env-password
. Hier ist ein vollständiges Beispiel:
LFTP_PASSWORD="just_an_example"
lftp --env-password sftp://[email protected] -e "put local-file.name; bye"
LFTP enthält auch eine coole Spiegelungsfunktion (kann das Löschen nach bestätigter Übertragung von '--Remove-source-files' beinhalten):
lftp -e 'mirror -R /local/log/path/ /remote/path/' --env-password -u user sftp.foo.com
Expect ist ein großartiges Programm.
Unter Ubuntu installieren Sie es mit:
Sudo apt-get install expect
Auf einem CentOS-Computer installieren Sie es mit:
yum install expect
Nehmen wir an, Sie möchten eine Verbindung zu einem SFTP-Server herstellen und anschließend eine lokale Datei von Ihrem lokalen Computer auf den Remote-SFTP-Server hochladen
#!/usr/bin/expect
spawn sftp [email protected]
expect "password:"
send "yourpasswordhere\n"
expect "sftp>"
send "cd logdirectory\n"
expect "sftp>"
send "put /var/log/file.log\n"
expect "sftp>"
send "exit\n"
interact
Dadurch wird eine SFTP-Verbindung mit Ihrem Kennwort zum Server hergestellt.
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 Remote-Server hochgeladen
Sie können lftp interaktiv in einem Shell-Skript verwenden, damit das Kennwort nicht in .bash_history oder ähnlichem gespeichert wird, indem Sie folgendermaßen vorgehen:
vi test_script.sh
Fügen Sie Ihrer Datei Folgendes hinzu:
#!/bin/sh
Host=<yourhostname>
USER=<someusername>
PASSWD=<yourpasswd>
cd <base directory for your put file>
lftp<<END_SCRIPT
open sftp://$Host
user $USER $PASSWD
put local-file.name
bye
END_SCRIPT
Schreiben/beenden Sie den vi-Editor, nachdem Sie Host, Benutzer, Übergabe und Verzeichnis für Ihre Put-Datei bearbeitet haben, indem Sie :wq
eingeben. Machen Sie dann Ihr Skript ausführbar chmod +x test_script.sh
und führen Sie es ./test_script.sh
aus.
Sie können dies überschreiben, indem Sie die Authentifizierung ohne Kennwort aktivieren. Sie sollten jedoch vorher die Schlüssel (pub, priv) installieren.
Führen Sie die folgenden Befehle auf dem lokalen Server aus.
Local $> ssh-keygen -t rsa
Drücken Sie die EINGABETASTE für alle Optionen, die dazu aufgefordert werden. Es müssen keine Werte eingegeben werden.
Local $> cd .ssh
Local $> scp .ssh/id_rsa.pub [email protected]:
Prompts for pwd$> ENTERPASSWORD
Stellen Sie mit dem folgenden Befehl eine Verbindung zum Remote-Server her
Local $> ssh [email protected]
Prompts for pwd$> ENTERPASSWORD
Führen Sie die folgenden Befehle auf dem Remote-Server aus
Remote $> mkdir .ssh
Remote $> chmod 700 .ssh
Remote $> cat id_rsa.pub >> .ssh/authorized_keys
Remote $> chmod 600 .ssh/authorized_keys
Remote $> exit
Führen Sie den folgenden Befehl auf dem lokalen Server aus, um die kennwortlose Authentifizierung zu testen. Es sollte ohne Passwort verbunden sein.
$> ssh [email protected]
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 der Option --password
, um das Kennwort in der Befehlszeile zu übergeben.
beispiel: sftp --password="password" "userid"@"servername"
Batch-Beispiel:
(
echo "
ascii
cd pub
lcd dir_name
put filename
close
quit
"
) | sftp --password="password" "userid"@"servername"
Ich dachte, ich sollte diese Informationen teilen, da ich auf verschiedenen Websites gesucht habe, bevor ich den Hilfebefehl (sftp -h
) ausgeführt habe, und war überrascht, die Kennwortoption zu sehen.
Kombinieren Sie sshpass mit einer gesperrten Anmeldeinformationsdatei und in der Praxis ist es so sicher wie nichts anderes - wenn Sie root auf der Box haben, um die Anmeldeinformationsdatei zu lesen, sind alle Wetten trotzdem deaktiviert.
Sie können dafür sshpass verwenden. Unten sind die Schritte
Sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #[email protected]#RemoteIP:/var/lib/Tomcat7/webapps
Bash-Programm, um darauf zu warten, dass sftp nach einem Passwort fragt und es dann mitsendet:
#!/bin/bash
expect -c "
spawn sftp [email protected]_Host
expect \"Password\"
send \"your_password_here\r\"
interact "
Möglicherweise müssen Sie erwarten, installieren, ändern Sie den Wortlaut von "Kennwort" in Kleinbuchstaben "p", um mit dem übereinzustimmen, was Ihre Eingabeaufforderung empfängt. 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.