Unten ist das Skript, das ich ausführen möchte, das ohne Probleme ausgeführt wird
for i in `seq 200 2100`
do
usr=(`ssh -t -t -o ConnectTimeout=60 machine$1 finger | tail -1 | awk '{print$1}'`)
echo $usr
done
Aber sobald ich es zu crontab hinzufüge, gibt es mir nicht den Benutzer.
22 12 * * * sh /home/subrahmanyam/Scripts/who.sh
Bitte geben Sie Ihre Gedanken .....
Vielleicht läuft Cron Demon, also müssen wir einige Binärdateien einfügen ...?
shell
ssh
cron
authentication
Gilles 'SO - hör auf böse zu sein'
quelle
quelle
Antworten:
Sie können SSH-Verbindungen innerhalb einer Cron-Sitzung herstellen. Sie müssen eine Authentifizierung mit öffentlichem Schlüssel einrichten, um einen kennwortlosen Zugriff zu erhalten. Damit dies funktioniert, müssen Sie
PubkeyAuthentication yes
in jedem Remote-Server habensshd_config
.Sie können ein privates / öffentliches Schlüsselpaar mit oder ohne Passphrase erstellen. Wenn Sie eine Passphrase verwenden (empfohlen), müssen Sie auch ssh-agent starten. Ohne Passphrase müssen Sie den Parameter nur
-i your_identity_file
zurssh
Befehlszeile hinzufügen .ssh
wird$HOME/.ssh/id_rsa
als Standard verwendet.Ich habe Ihr Beispiel mithilfe eines Schlüsselpaars mit einer Passphrase repliziert. So habe ich es gemacht.
1) Erstellt das Schlüsselpaar mit Passphrase. Der private Schlüssel wurde als gespeichert, der
~/.ssh/id_rsa_test
standardmäßig die richtigen Berechtigungen haben sollte. Wir können eine leere Passphrase eingeben, wenn wir keine verwenden.2) Der öffentliche Schlüssel wurde an die Server gesendet und für alle gleich ausgeführt. Denken Sie daran, dass sie
PubkeyAuthentication
aktiviert sein müssen.3) Führen Sie ssh-agent als Dienst mit aus
-s
. Dies wird es nicht töten, wenn Sie sich abmelden. Die Ausgabe ist ein gültiges Shell-Skript, das die Umgebung so einstellt, dass der SSH-Client weiß, wie er sich mit ihm verbindet. Wir speichern das in einer Datei (nur die erste Zeile wird wirklich benötigt).4) Das Obige wurde in unsere aktuelle Umgebung geladen, damit wir
ssh-add
unseren privaten Schlüssel hinzufügen könnenssh-agent
. die Passphrase von oben.5) Verifiziert, dass es hinzugefügt wurde.
6) Das Skript, das ich verwendet habe, ist leicht modifiziert als deins. Beachten Sie, dass ich den Befehl ssh nicht in Klammern gesetzt und keine Backticks verwendet habe. Dies
$()
ist eine bessere Alternative für die Befehlssubstitution (dies istbash
kompatibel, Sie haben nicht erwähnt, welche Shell Sie verwenden). Ich habe genau den gleichen ssh-Befehl wie Ihren verwendet.7) Mein Crontab (beachte, dass mein
sh
tatsächlich istbash
)8) Die Ausgabe
Das einzige Problem bei der Verwendung einer Passphrase besteht darin, dass Sie sie mindestens einmal manuell eingeben müssen. Daher funktioniert das oben Genannte nach einem Neustart nicht automatisch.
quelle
Wer gibt das Passwort ein? Der Cron-Job kann nicht bei Ihrem SSH-Agenten eingehen, sodass der öffentliche Schlüssel nicht funktioniert.
Sie müssen
ssh
eine Schlüsseldatei explizit angeben (siehe-i
Option), da sie keinen Agenten abfragen kann. und dieser Schlüssel muss eine leere Passphrase haben.quelle
/dev/tty
stattdessen das Kennwort gelesenstdin
. das wird von cron nicht funktionieren.known_hosts
? Aber ja, Sie müssen auf Berechtigungen achten - die private Schlüsseldatei sollte den Modus 0600 oder sogar 0400 haben, der Ihnen gehört. Wenn Sie einen anderen Benutzer benötigen, um ihn ebenfalls verwenden zu können, müssen Sie sich mit POSIX-ACLs oder Ähnlichem befassen.kinit
den Cron-Job zu verwenden. Allerdings erfordern Keytabs auch die gleiche Sorgfalt bei Berechtigungen. aberssh
zumindest wird sich nicht über sie beschweren.Anstatt eine temporäre Datei wie forcefsck zu speichern, bevorzuge ich die
find
Suche nach einem aktiven Agenten.Beim Thema eines Skripts, das das benötigt
ssh-agent
, verwende ich:Es sucht nach dem
ssh-agent
Socket und gibt den ersten zurück. Es ist nur auf den aktuellen Benutzer beschränkt, daher werden Sie nicht versehentlich versuchen, einen anderen Benutzer zu verwenden, und erhalten einen Fehler, dem die Berechtigung verweigert wurde. Sie müssten auch bereits mit einem aktiven angemeldet seinssh-agent
. (Ubuntu startet einen Agenten, wenn die GUI gestartet wird).Wenn Sie dies in ein anderes Skript einfügen, müssen Sie es mit
source
oder aufrufen,.
weil dieSSH_AUTH_SOCK
Variable festgelegt werden muss.quelle
Verwenden Sie ssh-cron , um geplante SSH-Verbindungen zum Sichern von Servern einzurichten, ohne Ihre SSH-Schlüssel offenzulegen, sondern den SSH-Agenten zu verwenden.
quelle
Sie können Ihr Skript oder Ihren Befehl in crontab wie folgt ausführen:
oder
quelle