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!
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.
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.
OK, ich hatte das gleiche Problem auch mit AIX. Das Szenario war unberechenbar, manchmal wurde der Befehl ausgeführt und manchmal wurde der /dev/tty
Fehler ausgegeben.
Ich habe es folgendermaßen umgangen: Ich exportiere SSH_ASKPASS
in 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_ASKPASS
und 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
Gilles 'SO-hör auf, böse zu sein'
/dev/tty
“ würde bedeuten, das Skript von einem Terminal aus auszuführen. Um die GUI-Eingabeaufforderung zu erhalten, benötigen Siessh-askpass
(und ich weiß nicht, warum Sie sie nicht mehr haben).Der Fuchs
Benutzer8411