Connexion ssh via shell

Fermé
Utilisateur anonyme - 30 janv. 2017 à 20:05
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 2 févr. 2017 à 10:13
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.

A voir également:

1 réponse

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
31 janv. 2017 à 10:33
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
$?
. 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
0
quand 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.sh
de 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/motd
sert à é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_login
ou
~/.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
1
Utilisateur anonyme
31 janv. 2017 à 12:22
Tout ça est très complet, je vais m'y pencher ces jours.

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?
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
1 févr. 2017 à 10:31
Pour quitter ta session distante, tu utilises bien la commande
logout
?
0
Utilisateur anonyme
1 févr. 2017 à 11:04
Cela est assez incompréhensible..
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.
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
2 févr. 2017 à 10:13
Sans le message d'erreur dur à dire :-)
0