Wie kann man den Fortschritt mit sshpass und scp unter Linux anzeigen?


9

In meinem Linux-Terminal verwende ich diesen Befehl

sshpass -p "pass" scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop

um eine Datei mit einem Passwort herunterzuladen. Ohne den sshpass kann ich den Download-Fortschritt sehen, aber damit ist er nur leer, bis er beendet ist und ich ihn nicht sehen kann.

Gibt es eine Möglichkeit, wie ich es mit sshpass sehen kann?

Antworten:


4

Ich denke, was Sie fragen, ist nicht einfach machbar, vielleicht sogar unmöglich mit einfachen Bash-Skripten.

Daher beantwortet das Folgende Ihre Frage nicht wirklich, bietet jedoch einen anderen Ansatz für Ihr Problem.

Anstatt zu verwenden sshpass, können Sie den scpBefehl plain mit einer publickey-Authentifizierung ohne Kennwort verwenden. Siehe [1], wenn Sie nicht wissen, was es ist.

Wenn Sie beabsichtigen, scp in Skripten für die lokale Verwendung zu verwenden , ist IMO der richtige Weg:

  • Generieren Sie einen öffentlichen Schlüssel ohne Passwort
  • Verwenden Sie ssh-copy-iddiese Option, um Ihren öffentlichen Schlüssel zum Server hinzuzufügen

Das reicht bereits aus, um Ihren Befehl ohne Aufforderung ausführen zu können:

scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop

Für Skripte, die Sie verteilen möchten, ist sshpass mit einem eindeutigen Kennwort sicherlich keine gute Idee. Verwenden Sie mindestens das Flag "-e" des sshpass und lassen Sie den Benutzer das Kennwort als Umgebungsvariable für eine bessere Sicherheit angeben.

In diesem Fall ist der Publickey-Ansatz etwas weniger bequem, aber dennoch möglich. Wenn Sie es sich nicht leisten können, den Benutzer des Skripts zum Erstellen eines öffentlichen Schlüssels aufzufordern, können Sie einen öffentlichen Schlüssel im laufenden Betrieb erstellen, auf den Server kopieren und scpohne Aufforderung ausführen :

 #!/bin/bash
 KEY="$HOME/.ssh/id_rsa_example"
 if [ ! -e "$KEY" ]; then
     ssh-keygen -t rsa -N "" -f "$KEY"
     sshpass -e ssh-copy-id -i "${KEY}.pub" me8@host.ca
 fi
 scp -r me8@host.ca:/cmshome/me/file /home/me/Desktop

Schließlich gibt es noch die Möglichkeit, rsyncstattdessen den Fortschrittsbalken zu erstellen:

$ rsync -P --rsh="sshpass -p $PASSWORD ssh -l me8" host.ca:/cmshome/me/file /home/me/Desktop

[1] https://help.ubuntu.com/community/SSH/OpenSSH/Keys

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.