Voici le script que j'essaie d'exécuter, qui s'exécute sans aucun problème
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
Mais une fois que je l'ajoute à crontab, il ne me donne pas l'utilisateur.
22 12 * * * sh /home/subrahmanyam/Scripts/who.sh
Veuillez donner votre avis .....
peut-être que cron demon est en cours d'exécution, nous devons donc inclure des binaires ...?
shell
ssh
cron
authentication
Gilles 'SO- arrête d'être méchant'
la source
la source
Réponses:
Vous pouvez établir des connexions ssh dans une session cron. Ce dont vous avez besoin est de configurer une authentification par clé publique pour avoir un accès sans mot de passe. Pour que cela fonctionne, vous devez avoir
PubkeyAuthentication yes
dans chaque serveur distantsshd_config
.Vous pouvez créer une paire de clés privée / publique avec ou sans phrase secrète. Si vous utilisez une phrase secrète (recommentée), vous devez également démarrer ssh-agent. Sans phrase secrète, il vous suffit d'ajouter le paramètre
-i your_identity_file
à lassh
ligne de commande.ssh
utilisera$HOME/.ssh/id_rsa
par défaut.J'ai reproduit votre exemple en utilisant une paire de clés avec une phrase secrète. Voici comment je l'ai fait.
1) Création de la paire de clés avec phrase secrète. Enregistré la clé privée sous
~/.ssh/id_rsa_test
, qui devrait avoir les autorisations correctes par défaut. Nous pouvons saisir une phrase secrète vide pour ne pas en utiliser une.2) Envoyé la clé publique aux serveurs, fait de même pour chacun d'eux. N'oubliez pas qu'ils doivent avoir
PubkeyAuthentication
activé.3) Exécutez ssh-agent en tant que service avec
-s
. Cela ne le tuera pas si vous vous déconnectez. Sa sortie est un script shell valide, définissant l'environnement pour que le client ssh sache comment s'y connecter. Nous l'enregistrons dans un fichier (seule la première ligne est vraiment nécessaire).4) Chargé ce qui précède dans notre environnement actuel afin que nous puissions utiliser
ssh-add
pour ajouter notre clé privée àssh-agent
. la phrase secrète d'en haut.5) Vérifié, il est ajouté.
6) Le script que j'ai utilisé, légèrement modifié que le vôtre. Notez que je n'ai pas mis la commande ssh entre parenthèses et que je n'utilise pas plutôt des astuces
$()
, ce qui est une meilleure alternative pour la substitution de commandes (c'estbash
compatible, vous n'avez pas mentionné le shell que vous utilisez). J'ai utilisé exactement la même commande ssh que la vôtre.7) Mon crontab (notez que mon
sh
est en faitbash
)8) La sortie
Le seul problème avec l'utilisation d'une phrase secrète est que vous devez la saisir manuellement au moins une fois. Ainsi, ce qui précède ne fonctionnera pas automatiquement après un redémarrage.
la source
Qui tape le mot de passe? Le travail cron ne peut pas atteindre votre agent ssh, donc la clé publique ne fonctionnera pas.
Vous devez fournir
ssh
un fichier de clé explicitement (voir l'-i
option), car il ne peut pas interroger un agent; et cette clé doit avoir une phrase de passe vide.la source
/dev/tty
pour lire le mot de passe au lieu destdin
; cela ne fonctionnera pas depuis cron.known_hosts
? Mais oui, vous devez faire attention aux autorisations - le fichier de clé privée doit être le mode 0600 ou même 0400, qui vous appartient. Si vous avez besoin d'un autre utilisateur pour pouvoir également l'utiliser, vous devrez vous pencher sur les ACL POSIX ou similaire.kinit
intérieur du travail cron. Cela dit, les keytabs nécessitent également le même soin dans les autorisations; maisssh
au moins ne s'en plaindra pas.Plutôt que de stocker un fichier temporaire comme forcefsck, je préfère utiliser
find
pour rechercher sur l'agent actif.Au sujet d'un script qui a besoin de
ssh-agent
, j'utilise:Il recherche le
ssh-agent
socket et retourne le premier. Il est limité à l'utilisateur actuel, vous n'essaierez donc pas accidentellement d'utiliser un autre utilisateur et d'obtenir une erreur d'autorisation refusée. Vous devrez également être déjà connecté avec un actifssh-agent
. (Ubuntu démarre un agent au démarrage de l'interface graphique).Si vous mettez cela dans un autre script, vous devrez l'appeler avec
source
ou.
parce qu'il doit définir laSSH_AUTH_SOCK
variable.la source
Utilisez ssh-cron pour configurer des connexions SSH planifiées pour sécuriser les serveurs sans exposer vos clés SSH, mais en utilisant l'agent SSH.
la source
Vous pouvez exécuter votre script ou commande dans crontab comme:
ou
la source