J'essaie de créer une connexion SSH et de faire certaines choses sur le serveur distant à partir du script.
Cependant, le terminal me demande un mot de passe, puis ouvre la connexion dans la fenêtre du terminal à la place du script. Les commandes ne sont pas exécutées tant que je n'ai pas quitté la connexion.
Comment puis-je SSH à partir d'un script bash?
Si vous souhaitez que l'invite de mot de passe disparaisse, utilisez l'authentification par clé ( décrite ici ).
Pour exécuter des commandes à distance sur ssh, vous devez leur donner un argument, comme suit:
root @ Host: ~ # ssh root @ www 'ps -ef | grep Apache | grep -v grep | wc -l '
Si vous souhaitez continuer à utiliser des mots de passe sans utiliser l'échange de clés, vous pouvez le faire avec 'expect' comme ceci:
#!/usr/bin/expect -f
spawn ssh user@hostname
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN
Il existe un autre moyen de le faire en utilisant les connexions partagées, c'est-à-dire que quelqu'un initie la connexion en utilisant un mot de passe et que chaque connexion suivante sera multiplexée sur le même canal, éliminant ainsi le besoin d'une nouvelle authentification. (Et c'est plus rapide aussi)
# ~/.ssh/config
ControlMaster auto
ControlPath ~/.ssh/pool/%r@%h
ensuite, il vous suffit de vous connecter et, tant que vous êtes connecté, le script bash sera en mesure d'ouvrir des connexions ssh.
Vous pouvez alors empêcher votre script de fonctionner si quelqu'un n'a pas déjà ouvert le canal en:
ssh ... -o KbdInteractiveAuthentication=no ....
Ce que vous devez faire est d’échanger les clés SSH contre l’utilisateur sous lequel le script est exécuté. Regardez ce tutoriel
Après cela, vos scripts seront exécutés sans qu'il soit nécessaire d'entrer un mot de passe. Mais, pour des raisons de sécurité, vous ne voulez pas faire cela pour les utilisateurs root!