it-swarm.com.de

Wie übergebe ich ein Passwort an den Befehl scp, der im Bash-Skript verwendet wird?

Mögliches Duplikat:
Verbindung über SSH herstellen und Kennwort automatisch eingeben, ohne einen öffentlichen Schlüssel zu verwenden

Ich habe ein Bash-Skript, das einen Dump der Datenbank erstellt und dann die Datei von einem Server auf einen anderen kopiert, aber vor der Verbindung immer nach dem Kennwort fragt.

scp file.tar.gz [email protected]:/backup

Gibt es eine Möglichkeit, das Passwort direkt an das Skript zu übergeben?

43
chubbyk

Verwenden Sie das Tool sshpass

sshpass -p 'password' scp file.tar.gz [email protected]:/backup 
68
GGarciaBas

Anstatt root zu verwenden, erstellen Sie ein Konto nur für diesen Job. Verwenden Sie öffentliche Schlüssel ohne Passphrase anstelle von Passwörtern.

scp -i /home/backupuser/.ssh/id_rsa [email protected]:/backup

Wenn Sie ein spezielles Konto für die Sicherung auf dem Zielsystem verwenden, legen Sie Ihr Root-Passwort nicht offen.

41
user9517

pscp ermöglicht es Ihnen, das Passwort direkt mit dem Argument -pw zu übergeben. Alternativ, und dies ist eine bessere Idee, verwenden Sie den ssh-Agenten und richten Sie die schlüsselbasierte Anmeldung ein - dies ist sicherer. Hier finden Sie eine Anleitung zum Einrichten von ssh für die Verwendung von key based logon

Mit dem Befehl yes können Sie ein Ja an das Programm senden.

3
Journeyman Geek

Es ist besser, ssh für die verwendete schlüsselbasierte Authentifizierung einzurichten, als herauszufinden, wie Text mit etwas wie expect an den Anmeldevorgang gesendet wird.

Schauen Sie sich an:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys

Führen Sie also im Grunde ssh-keygen -t dsa Auf dem Computer aus, auf dem Ihr Skript ausgeführt wird. Wenn Sie nach einer Passphrase gefragt werden, drücken Sie die EINGABETASTE, um ein Leerzeichen zu akzeptieren. Sie erhalten zwei Dateien. Wenn Sie den Standardvorschlägen gefolgt sind, lauten die Dateien ~/.ssh/id_dsa und ~/.ssh/id_dsa.pub. Der erste ist der private Schlüssel. Der zweite ist der öffentliche Schlüssel.

Kopieren Sie den öffentlichen Schlüssel mit ssh-copy-id [email protected] Auf den zweiten Server. Dadurch wird der öffentliche Schlüssel zur Datei "authorized_keys" des Benutzers auf Server2 hinzugefügt.

Sie sollten jetzt in der Lage sein, ssh vom ersten Computer aus auszuführen und sich ohne Kennwort anzumelden.

Zum Kopieren der Dateien sind scp oder rsync in Ordnung. Es hängt davon ab, was Sie tun. rsync verwendet standardmäßig ssh, verwendet also die soeben eingerichtete schlüsselbasierte Authentifizierung.

3
cjc

Sie sollten aus Sicherheitsgründen keine passwortlosen SSH-Schlüssel verwenden.

Das Tool keychain kann Ihnen helfen, den ssh-Agenten wiederzuverwenden und rsync über ssh in Skripten auszuführen, ohne zur Eingabe von Kennwörtern aufgefordert zu werden.

Um es auf einem Ubuntu-Computer zu installieren, führen Sie einfach den folgenden Befehl aus.

Sudo apt-get install keychain

Weitere Informationen zur Verwendung finden Sie in der Manpage für Schlüsselbund .

2
pkhamre

scp verwendet SSH, um zu einem Remote-Server zu tunneln und Dateien zu übertragen. SSH kann Benutzer mit einem Kennwort, einem SSH Schlüssel oder beidem authentifizieren (empfohlen).

Um Dateien ohne Passwort zu übertragen, erstellen Sie einen SSH Schlüssel für den Benutzer, den Sie verwenden möchten (root ist nicht empfohlen, verwenden Sie einen nicht privilegierten Benutzer stattdessen und haben einen Job auf dem Zielserver als root, um die privilegierte Aktion auszuführen).

Anschließend müssen Sie den Daemon SSH des Zielsystems so konfigurieren, dass SSH Schlüsselverbindungen akzeptiert werden (auch im obigen Link).

Beachten Sie, dass kompromittierte SSH Schlüssel ohne Passwort mit kompromittierten Passwörtern identisch sind - jeder kann einsteigen. Für echte Benutzer ist es besser, die Sicherheit zu verdoppeln und den Schlüssel und ein Passwort zu benötigen.

1
Andy