Mac OS X Lion und sshpass

Ich habe ein Upgrade von Mac OS X Snow Leopard auf Lion durchgeführt . Ich habe mehrere Skripte mit verwendet sshpass, aber nach dem Upgrade auf Lion wird der folgende Fehler angezeigt:

Zugang verweigert, versuche es bitte erneut.
debug1: read_passphrase: /dev/tty kann nicht geöffnet werden: Gerät nicht konfiguriert
debug1: permanent_drop_suid: 502
ssh_askpass: exec(/usr/libexec/ssh-askpass): Keine solche Datei oder Verzeichnis

Ich kann mich nur mit verbinden sshpass(oder das Passwort manuell eingeben). Kein öffentlicher/privater Schlüsselweg. Ich habe MacPorts und sshpass neu installiert.

Wie bekomme ich ssh-askpass ? Wie kann ich /dev/tty konfigurieren ?

Grüße!

„Konfigurieren /dev/tty“ würde bedeuten, das Skript von einem Terminal aus auszuführen. Um die GUI-Eingabeaufforderung zu erhalten, benötigen Sie ssh-askpass(und ich weiß nicht, warum Sie sie nicht mehr haben).
Ich brauche ssh-askpass nicht, aber sshpass braucht es für ... nichts. 0.o Ich führe alle meine Skripte vom Terminal aus. Ich habe keine GUI für die Skripte.
Ich erlebe das gleiche Problem. Ich verwende eine App auf Snow Leopard, die sshpass verwendet, und es funktioniert gut. Bei Lion nicht. Ich erhalte die folgende Meldung: ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory Das Lustige ist, dass /usr/libexec/ssh-askpass auch auf Snow Leopard nicht existiert. Ich habe auf anderen Websites gesehen, dass die Meldung "Keine solche Datei oder kein solches Verzeichnis" eine irreführende Meldung ist. Irgendwelche Ideen?

Antworten (4)

Sie sollten zuerst eine Beschwerde bei der Administration des Servers einreichen und feststellen, dass die Authentifizierung mit öffentlichen Schlüsseln weitaus sicherer ist als nur ein Passwort, aber ich gehe davon aus, dass Sie dies bereits getan haben und Ihre Administratoren einfach Idioten sind.

Apple hat leider ssh-askpass entfernt, als sie seine Funktionalität in ssh, scp und ssh-add integriert haben. Es gibt jedoch ein SSHKeychain-Paket, das einen ssh-askpass mit einer Apple-ähnlichen Cocoa-Passwortabfrage für das openssh-Paket von macports bereitstellt. Es sollte Ihre Probleme so beheben, wie Sie es möchten, und vielleicht sogar die Variable SSH_ASKPASS für Sie setzen.

Nur zu Ihrer Information, ich würde normalerweise davon abraten, das openssh-Macports-Paket selbst zu installieren, da es Ihre Apple-Passwortabfrage unterbricht, aber sobald Sie SSHKeychain installiert haben, bietet macports normalerweise ein neueres Openssh als Apple.

Es ist meiner Meinung nach nichts falsch daran, Passwörter in Skripte einzubetten, wenn der Server die Authentifizierung mit öffentlichen Schlüsseln deaktiviert, dh wenn sie sich um die Sicherheit kümmern, sollten sie öffentliche Schlüssel wieder aktivieren. Es gibt sogar Server, die sshpass absichtlich unterbrechen. Sie können mit dem folgenden Expect-Skript auf solche Maschinen zugreifen:

#!/usr/bin/expect -f
set timeout -1
set send_human {.05 0.1 1 .07 1.5}
eval spawn $argv
match_max 100000
expect {
   -re "USERNAME@(\[0-9A-Za-z_\\-\\.\]+)'s password: "
     { sleep 0.1 ; send -- "PASSWORD\r" ; sleep 0.3 }
}
interact

Sie können dieses Skript beschleunigen, indem Sie die Verzögerungen sleeps und send_human reduzieren.

Ich bin auch auf ein ähnliches Problem gestoßen, nachdem ich auf Mac OS X Lion aktualisiert hatte. Ich verwende Unison, um ein Verzeichnis auf meinem MacBook Pro mit meinem Linux-Server zu synchronisieren, aber nach dem Upgrade konnte ich keine Verbindung mehr herstellen. Das Problem ist, dass /usr/libexec/ssh-askpass in Lion fehlt. Um dies zu korrigieren, gehen Sie zu http://westergaard.eu/2011/07/printing-on-wi-from-mac-os-x-lion/?utm_source=rss&utm_medium=rss&utm_campaign=printing-on-wi-from- mac-os-x-lion . Dort können Sie die Datei Printer-hack.zip herunterladen. Es enthält die Datei ssh-askpass, die Sie dann nach /usr/libexec/ verschieben können.

Also habe ich den ssh-askpass aus der Zip-Datei in /usr/libexec/ abgelegt. Aber jetzt erscheint das ssh-askpass-Formular, während ich die Option "-p" verwende: sshpass -p. Das macht keinen Sinn!

Der richtige Weg, dies zu beheben, besteht darin, alle von Ihnen installierten sshpass-Sachen zu entfernen und sich nur auf das zu verlassen, was Apple bereits für Sie eingerichtet hat.

Standardmäßig wird ssh-agent bereits ausgeführt (tatsächlich bereit, ausgeführt zu werden, sobald Sie es verwenden, über launchd). Sie können dies vom Terminal aus überprüfen env|grep SSH, mit dem etwas wie zurückgegeben werden sollte SSH_AUTH_SOCK=/tmp/launch-7D4wfP/Listeners. Wenn es nicht so aussieht, überschreiben Sie immer noch die Standardeinstellung in einem Ihrer Shell-Startskripts.

Speichern Sie dann Ihre SSH-Schlüssel-Passphrase in Ihrem Schlüsselbund mit ssh-add -K. Sobald dies erledigt ist, wird Ihr Schlüssel bei Bedarf automatisch in Ihren ssh-Agent geladen.

BEARBEITEN: Ups, ich habe das Bit "no pubkey auth" verpasst und was ssh-pass tut. Ok, versuchen Sie, die Umgebungsvariable SSH_ASKPASS auf ein Skript zu setzen, das Ihr Passwort ausgibt. Dadurch führt ssh dieses Skript anstelle von ssh_askpass aus.

Was passieren könnte, ist, dass Lion strenger mit dem TTY umgeht und die Umgebung, die ssh-pass bietet, nicht als echtes TTY akzeptiert. Wenn dies der Fall ist, muss ssh-pass korrigiert werden. Vielleicht funktioniert es auch, wenn Sie Ihr eigenes ssh kompilieren.

Alles, was Sie geschrieben haben, hat nichts mit diesem Problem zu tun. Okay, noch einmal. Ich kann die Public/Private-Key-Methode NICHT verwenden. Das war in der Vergangenheit nicht möglich und wird es auch in Zukunft nicht können. Ich habe nur diese eine Methode, um automatisch eine Verbindung zu einem Server herzustellen. Ich muss mich jeden Tag mit ssh zu einem Dutzend Server verbinden und das manuelle Kopieren des Passworts ist sehr nervig. Es kann nicht sein, dass Apple die Skripte entfernt!

OK, ich hatte das gleiche Problem auch mit AIX. Das Szenario war unberechenbar, manchmal wurde der Befehl ausgeführt und manchmal wurde der /dev/ttyFehler ausgegeben.

Ich habe es folgendermaßen umgangen: Ich exportiere SSH_ASKPASSin ein Shell-Skript, das das Passwort zurückgibt. und dann laufen ./sshpass -p $password $user@$node hostname. Dabei erscheinen die Fälle, in denen sich ssh darüber beschwert /dev/tty, $SSH_ASKPASSund erhalten das Passwort.

Hoffe, das ist nützlich. Ich bin versucht zu glauben, dass dies eher ein sshpass-Fehler ist, habe aber natürlich nicht mehr debuggt.

Gruß Suriyan

OK, ich habe festgestellt, dass ich dieses Problem mit sshpass Version 1.05 hatte. Wenn ich sshpass Version 1.04 verwende, sehe ich dieses Problem nicht. Es hat also auch etwas mit ssh-Versionen zu tun. AIX verwendet eine ältere ssh-Version. Ich würde vorschlagen, dass Sie die Versionen 1.04 und 1.05 von sshpass ausprobieren.