Connexion ssh via shell
Bonjour,
Je viens vers où pour une question qui parait bête, mais me bloque un peu.
Dans le cadre de mon projet, je dois réaliser quelques scripts, dont un qui me permet de ma station d'administration, de me connecter à distance sur un de mes serveurs.
La question que je me pose, est-il possible après ma commande ssh, de tester la connexion disons, et d'afficher un message du genre "bienvenue sur le serveur xxx" si le mot de passe tapé est correct, ou d'afficher un message d'erreur personnalisé le cas contraire ?
Suivi d'un sleep, et ensuite le reste de mon script s'exécute..
Merci de vos retours.
Romain.
Je viens vers où pour une question qui parait bête, mais me bloque un peu.
Dans le cadre de mon projet, je dois réaliser quelques scripts, dont un qui me permet de ma station d'administration, de me connecter à distance sur un de mes serveurs.
La question que je me pose, est-il possible après ma commande ssh, de tester la connexion disons, et d'afficher un message du genre "bienvenue sur le serveur xxx" si le mot de passe tapé est correct, ou d'afficher un message d'erreur personnalisé le cas contraire ?
Suivi d'un sleep, et ensuite le reste de mon script s'exécute..
Merci de vos retours.
Romain.
A voir également:
- Connexion ssh via shell
- Gmail connexion - Guide
- Classic shell - Télécharger - Personnalisation
- Connexion chromecast - Guide
- Ssh secure shell download - Télécharger - Divers Web & Internet
- Gmail connexion autre compte - Guide
1 réponse
Bonjour
Je vais appeler client la machine qui lance le script et donc la commande ssh, et serveur la machine à laquelle tu te connecte en ssh.
Au moment de lancer ton script, si la commande ssh rate (par exemple à cause d'un problème réseau ou de mot de passe), celle-ci retourne un code d'erreur que tu peux récupérer dans la variable
Tu peux donc côté client facilement vérifier qu'une commande marche ou pas.
Exemple :
Testons :
Tu noteras que dans mon exemple, le programme sort (
Tu peux faire de même avec ta commande
Ensuite, si la connexion réussie, alors ce n'est plus ton script client qui "affiche" du texte mais la machine côté serveur. Note que tant que ta commande ssh est en cours, le script côté client est "en pause", puisque cette instruction n'est pas finie.
Côté serveur, le fichier
Tu peux aussi écrire sur le compte ssh atteint un fichier
Ensuite tout dépend de ce que doit faire ton script. Si par exemple c'est copier un fichier qui vient du serveur (ou vers le serveur), ou lancer une commande sur le serveur, alors peut être qu'il faut écrire un truc du genre :
Il peut aussi être intéressant de configurer une clé ssh pour que le script s'exécute sans avoir à demander de mot de passe à chaque commande ssh ou scp.
Bonne chance
Je vais appeler client la machine qui lance le script et donc la commande ssh, et serveur la machine à laquelle tu te connecte en ssh.
Au moment de lancer ton script, si la commande ssh rate (par exemple à cause d'un problème réseau ou de mot de passe), celle-ci retourne un code d'erreur que tu peux récupérer dans la variable
$?. La valeur prise par cette variable est spécifiée dans
man ssh, section valeur retournée (appelé code d'erreur ou code d'exécution). Par convention, les commandes retournent
0quand tout va bien et un entier positif non nul sinon.
Tu peux donc côté client facilement vérifier qu'une commande marche ou pas.
Exemple :
#/bin/sh ls ascacsaac if [ $? -ne 0 ] then echo ":(" 1>&2 exit 1 fi exit 0
Testons :
(mando@velvet) (~) $ sh toto.sh
ls: impossible d'accéder à 'ascacsaac': Aucun fichier ou dossier de ce type
:(
Tu noteras que dans mon exemple, le programme sort (
exit) avec un code d'erreur. Ce qui permet à quelqu'un qui appellerait
toto.shde récupérer lui aussi un code d'exécution.
Tu peux faire de même avec ta commande
ssh.
Ensuite, si la connexion réussie, alors ce n'est plus ton script client qui "affiche" du texte mais la machine côté serveur. Note que tant que ta commande ssh est en cours, le script côté client est "en pause", puisque cette instruction n'est pas finie.
Côté serveur, le fichier
/etc/motdsert à écrire un message de bienvenue, mais il est global à tous les utilisateurs et toutes les connexions à cette machine (par ssh ou en console).
Tu peux aussi écrire sur le compte ssh atteint un fichier
~/.bash_loginou
~/.bashrc(il sera alors limité à cette utilisateur, mais suppose qu'il utilise un shell bash). Si un autre shell est utilisé, il faut trouver le nom du fichier équivalent.
Ensuite tout dépend de ce que doit faire ton script. Si par exemple c'est copier un fichier qui vient du serveur (ou vers le serveur), ou lancer une commande sur le serveur, alors peut être qu'il faut écrire un truc du genre :
scp toto@serveur:/chemin/vers/fichier /repertoire/destination
ssh toto@serveur ma_commande
Il peut aussi être intéressant de configurer une clé ssh pour que le script s'exécute sans avoir à demander de mot de passe à chaque commande ssh ou scp.
Bonne chance
Une dernière chose, un point que je n'arrive pas du tout à éclaircir...
J'ai mon script admin, avec un case qui me permet en 1 de me connecter en ssh sur un de mes serveurs.
Suite à cela, un script se lance (.bashrc), dans ce script j'ai aussi un case avec certaines commandes, dont une qui me permet de le quitter, et aussi de quitter le serveur pour revenir sur mon menu administration.
Seulement, à cette commande, il termine juste l'exécution du script et ne me delog pas, je mets un exit ou exit 0 rien n'y fait.
Aurais-tu une idée/solution?
Aujourd'hui mon exit fonctionne et me kick bien de la session.
Reste une colle à résoudre, sur la session à laquelle j'accède à distance via ssh, je mets dans mon .bashrc un
if -test -e $SSH_TTY
Cheminscript.sh
fi
Cela fonctionne quand je me connecte en ssh, mais plante ma session en locale, je ne comprends pas pourquoi.