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!STDIN is not a terminal
Fehlermeldung. Diesmal wurde ich jedoch nicht zur Eingabe eines Passworts aufgefordert. Ich glaube, dassSSH_ASKPASS
es im Automator funktioniert, daSSH_ASKPASS
ich einePermission denied, please try again.
Fehlermeldung bekomme , wenn ich die Datei mit dem falschen Passwort zurückschicke.macOs >= 10.13
Ich habe eine Lösung gefunden (danke an Daniel Beck für die Bereitstellung der dafür erforderlichen Schlüsselinformationen). Beachten Sie, dass ich dies nur mit OS X Lion 10.7.2 getestet habe. Wenn dies bei Ihnen nicht funktioniert, versuchen Sie es mit Daniels Lösung.
Zuerst müssen wir die
SSH_ASKPASS
Umgebungsvariable festlegen - ihr Wert sollte der Pfad zu einem Programm sein, das das Kennwort für die Standardausgabe druckt. Um das Passwort vom Schlüsselbund zu erhalten, muss es so aussehen (ich nenne esget-ssh-password.sh
):Ein paar Punkte zu beachten:
Dies setzt voraus, dass Sie das Passwort wie in der Frage beschrieben im Schlüsselbund gespeichert haben
Das in angegebene Programm
SSH_ASKPASS
wird ohne Argumente aufgerufen. Daher verwenden wir Umgebungsvariablen, um den Benutzer und den Hostnamen an ihn zu übergeben.Jetzt können wir festlegen
SSH_PASSWORD_USER
undSSH_PASSWORD_HOSTNAME
ausführensshpass
, um uns bei unserem Server anzumelden.Ich habe ein anderes Skript erstellt
ssh-kcpass
, um dies zu tun:Um sich beim SSH-Server anzumelden, ohne ein Kennwort einzugeben, müssen Sie nur ausführen
ssh-kcpass user@hostname
.quelle
macOS >= 10.13
Hallo Leute, ich bin auf dieses Thema gestoßen und habe nach etwas anderem gesucht, aber ... Ich weiß nicht, ob mir hier etwas fehlt ... aber Ihr Ansatz scheint mir seltsam. Warum nicht einfach die Authentifizierung mit öffentlichem Schlüssel verwenden? Generieren Sie einen RSA-Schlüssel. $ ssh-keygen -t rsa -b 2048 -C 'email / id'
Idealerweise verwenden Sie einmal die ssh-copy-id user @ host und authentifizieren sich einmal mit dem Kennwort, um den Schlüssel auf dem anderen Server zu installieren, oder verwenden ein beliebiges Skript oder Authentifizierungstool, um den Schlüssel für ~ / .ssh / autorisierte_keys auf bereitzustellen der andere Host (für den Benutzer, bei dem Sie sich anmelden möchten) Wenn Sie den Befehl manuell ausführen, müssen Sie / etc / ssh / sshd_config entsprechend bearbeiten und mit der Automatisierung (Chef, ansible) würden Sie die vollständige Bedingung für den gewünschten Status drücken.
Der Schlüssel, der für die Verteilung wichtig ist, ist id_rsa.pub. Bewahren Sie den privaten Schlüssel sicher auf
Um den Schlüsselbund zur automatischen Authentifizierung bei Hosts zu verwenden, bearbeiten Sie auf Ihrem Computer die Datei ~ / .ssh / config und fügen Sie Folgendes hinzu:
Host * UseKeychain ja
Suchen Sie nach weiteren Informationen zu den Optionen der SSH-Konfigurationsdatei und hoffen Sie, dass dies alles nützlich ist
quelle