Bash Script: Exécute les commandes Unix dans un serveur distant

J’essaie de me connecter au serveur B à partir du serveur A et d’exécuter des commandes UNIX simples sur le serveur B à l’aide d’un script shell. Le code est comme suit. Mais ls -al affiche le résultat du serveur A et non celui connecté sur le serveur B. Toutes les entrées sont très appréciées. Merci

#!/bin/bash clear sshpass -p password ssh hostname ls -al exit 

Lorsque le shell interprète un fichier de script, il crée un processus enfant pour exécuter chaque ligne de commande. Ainsi, les lignes de commande après sshpass -p password ssh hostname ne sont pas réellement exécutées dans la session ssh vers hostname , mais dans l’hôte sur lequel l’instance bash est exécutée.

Pour obtenir ce que vous voulez, vous pouvez vérifier la ligne d’utilisation de ssh (1) et noter qu’il existe un argument [command] qui dit:

Si la commande est spécifiée, elle est exécutée sur l’hôte distant au lieu d’un shell de connexion.

Donc, une façon de le faire est sshpass -p password ssh hostname ls -la . Une autre façon de fournir plus de flexibilité est:

 #!/bin/bash clear cat | sshpass -p password ssh hostname < 

Ce qui obligerait ssh à démarrer un shell de connexion dans l'hôte distant et à transmettre à son stdin les lignes fournies dans le document Here. Le shell distant interpréterait alors ces chaînes en tant que commandes et les exécuterait.

Si vous voulez juste lancer ls -al sur le serveur distant, mettez-le sur la même ligne que la commande ssh comme

 sshpass -p password ssh hostname ls -al 

il sortira automatiquement quand il arrivera à la fin de la commande pour que vous n’ayez pas besoin de exit

De plus, si vous voulez le faire et ne voulez pas entrer le mot de passe de manière interactive, vous pouvez envisager de partager des clés publiques / privées et de les utiliser pour ne jamais demander de mot de passe protéger votre clé privée)