Ein sehr seltsames Problem haben. Ich habe ein kleines Bash-Skript erstellt, das einen Befehl auf einem Remote-Host über ssh ausführt (unter Verwendung der Authentifizierung mit öffentlichem Schlüssel).
Wenn ich dieses Skript manuell über die Befehlszeile ausführe, funktioniert es einwandfrei, aber wenn es in /etc/cron.hourly abgelegt wird, schlägt es mit einem Permission denied, please try again.
Fehler fehl .
- Ich setze den Schlüssel im Skript explizit mit
ssh -i /root/.ssh/id_rsa user@remote "command"
; - Das Skript wird als Root ausgeführt (ich habe ein
echo `id` > /tmp/whoami.log
zur Doppelprüfung hinzugefügt ). und - Der SSH-Schlüssel ist nicht passwortgeschützt ...
Das System ist ein Ubuntu 12.04-Server. Ich habe auf der Remote-Seite nicht viel Zugriff auf die Fehlerbehebung, aber wie gesagt, das manuelle Ausführen von ssh oder dasselbe Bash-Skript über die Befehlszeile funktioniert.
Irgendeine Idee, warum dies passiert oder wie man es behebt?
aktualisieren
Es stellte sich heraus, dass ich mich geirrt hatte und der SSH-Schlüssel durch ein Passwort geschützt war (wobei der Schlüsselbund den SSH-Agenten lud), weshalb er in einem Skript fehlgeschlagen ist, aber nicht, wenn er von der Bash-Sitzung ausgeführt wurde. Das Hinzufügen . ~/.keychain/$HOSTNAME-sh
zu meinem Skript löste das Problem (danke an @grawity, der mich in die richtige Richtung wies und eine umfassende Antwort gab).
SSH_AUTH_SOCK
das zusammenhängt (obwohl ich gerne etwas probiere). Ich greife direkt auf die Schlüsseldatei zu und die Schlüsseldatei ist nicht passwortgeschützt. Wie für KRB5CCNAME
eine schnelle Suche ergab dies etwas mit Kerberos zu tun ist. Wieder - sehen Sie nicht die Verbindung zu diesem Problem, aber vielleicht fehlt mir hier etwas ...
-v
diesem ssh
Befehl eine Option hinzufügen würden ...
ssh -i
In beiden Fällen verwende ich den Befehl key explizit mit ... Ich werde versuchen, diese Variablen im Skript zu deaktivieren und zu sehen. Guter Vorschlag zum Hinzufügen -v
- ich werde es auch hinzufügen.
SSH_AUTH_SOCK
undKRB5CCNAME
Umgebungsvariablen erneut testen .