Nicht interaktive SSH-Sitzungen
Wenn Sie keine interaktive Sitzung auf dem Remoteserver benötigen, können Sie ssh
in einer Umgebung ohne tty
z. B. im Rahmen einer Aktion " Shell-Skript ausführen" in Automator ausführen .
Sie müssen ein Programm erstellen, das beim Aufruf das Kennwort standardmäßig ausgibt, z. B. das folgende Bash-Skript, das Sie ausführen müssen, um Folgendes auszuführen chmod +x pwd.sh
:
#!/usr/bin/env bash
echo "password"
Setzen Sie dann die SSH_ASKPASS
Umgebungsvariable auf den Pfad zu diesem Programm und führen Sie ssh
die Automator-Aktion wie folgt aus :
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Wenn nein tty
, aber SSH_ASKPASS
und DISPLAY
(für X11 standardmäßig festgelegt) festgelegt sind, führt SSH das von angegebene Programm aus SSH_ASKPASS
und verwendet seine Ausgabe als Kennwort. Dies soll in grafischen Umgebungen verwendet werden, damit ein Fenster angezeigt wird, in dem Sie nach Ihrem Kennwort gefragt werden. In diesem Fall haben wir einfach das Fenster übersprungen und das Passwort von unserem Programm zurückgegeben. Sie können security
stattdessen wie folgt aus Ihrem Schlüsselbund lesen:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls
(in der ssh
Befehlszeile) ist der Befehl, der ausgeführt wird, wenn er ssh
angemeldet ist, und dessen Ausgabe in Automator gedruckt wird. Sie können es natürlich in eine Datei umleiten, um die Ausgabe des von Ihnen gestarteten Programms zu protokollieren.
Interaktive SSH-Sitzungen mit sshpass
Ich habe heruntergeladen, kompiliert und installiert sshpass
und es hat perfekt funktioniert. Folgendes habe ich getan:
- Holen Sie sich die Apple-Entwicklertools
- Herunterladen und öffnen
sshpass-1.05.tar.gz
- Öffnen Sie eine Shell für das Verzeichnis
sshpass-1.05
- Lauf
./configure
- Lauf
make
- Führen
make install
Sie aus (möglicherweise benötigen sudo
Sie dafür)
Jetzt ist das Programm auf installiert /usr/local/bin/sshpass
. Führen Sie mit einer Zeile wie der folgenden aus:
sshpass -pYourPassword ssh username@hostname
Sie können das Passwort security
kurz zuvor lesen und wie folgt verwenden:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Wickeln Sie dies in eine Shell-Funktion ein und Sie können einfach zB ssh-yourhostname
eingeben, um eine Verbindung herzustellen, damit das Kennwort automatisch abgerufen und eingegeben wird.
STDIN is not a terminal
. 2) Bei interaktiven Sitzungen mit machtsshpass
die-p
Option anscheinend nichts. Aber laufen,sshpass
währendSSH_ASKPASS
eingestellt ist, funktioniert!