Automatiser commandes ssh

Tout d’abord bonjour.

J’essaie en ce moment de créer une page en php qui me permettrait d’executer des commandes via le module libssh2. Ainsi je me connecte en ssh sur un serveur et je lui soumet la ligne de commande voulue.

Je butte néanmoins sur un probleme génant:

Si par exemple je veux créer un user, j’ai plein de prompts ensuite, et impossible de les remplir…

y aurait il une alternative pour “simuler” la commande entrée, ou alors pour pouvoir remplir tous les prompts suivants directement dans ma commande (il y aura plusieurs commandes pour plusieurs choses différentes… pas seulement la création d’utilisateurs)

Merci d’avance

Bounjour,

Pour eviter la demande du login il y a une option à la commande ssh : ‘-l’.
Pour le mot de passe, utilise plutot par une identification par clef.

Tu peux remplir les prompts dans ta commande :
adduser moi --ingroup moi --home /home/moi --shell /bin/bash …

Par contre, en lisant le man, je ne vois pas l’option --password !
Maintenant, si tu utilises une authentification par clé comme muff te le conseille, tu peux mettre l’option --disabled-password qui empêche l’authentification par mot de passe.

Après, il faut que tu remplisses tous les prompts.
Et faut que tu regardes les man de toutes les autres commandes.

Admettons que j’y arrive pour cela, mais que je veuille aussi créer un compte samba par exemple, ou un compte pour autre chose et que je ne puisse pas passer en parametre dans ma ligne de commande…

Comment faire?

En gros ce que je voudrais c faire un script qui dit

premiere ligne de commande > Entrée
Attendre le prompt
deuxieme ligne de commande pour répondre au prompt > Entrée
Attendre un autre prompt
troisieme ligne de commande pour répondre encore au prompt …

En gros pouvoir mettre mes commandes pour répondre a ce qu’il me demandera…

pour la connection sans mot de passe:
viewtopic.php?f=8&t=5472

pour ce qui est d’un lot de commande à executer, en mode asynchrone, c’est facile, tu mets au point des scripts sur le serveur que tu executes ensuite à distance depuis si j’ai bien compris ton serveur et aprés tu récupères les logs.
Mais en mode connecté comme tu veux, je ferais un script perl sur le serveur pour piloter simplement la transaction.

Bonjour
Tout d’abord merci pour ta réponse!

Aucun probleme pour executer un script à distance, par contre comment le créer?

Car c’est la mon probleme, comment faire un script qui intercepte les prompt a la suite d’une commande pour continuer a remplir des champs…

Du genre

ajouter_utilisateur -u monnom

Entrer le prenom de la personne :

monprenom

Entrer maintenant un mot de passe:

pass

Veuillez confirmer votre mot de passe:

pass

(voila globalement ce que j’aimerai pouvoir faire avec mon script en automatisé…)

Si tu as une quelconque idée sur comment faire, ou des bonnes adresses autres que google (j’ai vraiment tout essayé)

Merci beaucoup d’avance!

Ca, si vraiment tu te retrouves à devoir gèrer un dialogue d’authentification, c’est vraiment pas sûr, parceque ça sous entend que tu mettes ton passwd en clair quelque part pour que le script puisse le fournir.
AMA, il vaut mieux reprendre le pb à la base.
Peux tu sans indiscretion décrire un peu plus largement ton pb ?
Quel est ce logiciel que tu tentes de piloter à distance ?

Sinon, sous perl, ce genre de dialogue se gère avec open2 (ou open3). Mais le sujet dérive sur de la programmation plus que du support, si on cause de ça.

Alors, a l’origine je dispose de deux serveurs (virtualisés sur une meme machine)
Un serveur Debian
Un windows 2003 server

je voudrais pouvoir en pilotant par une page web (php) créer des utilisateurs automatiquement

Je voudrais aussi avoir des options (checkbox) :

Compte Ftp
Création des dossiers (correspondant au futur espace disque de l’utilisateur)
Utilisateur samba et dossiers partagés

Compte Active directory
Script ouverture de session windows

Suivant ce que je valide
je voudrais me connecter en ssh aux serveurs (pour l’instant mon probleme est le linux, pour windows je ne me suis pas encore posé la question)

et que les comptes, dossiers, et partages se créent automatiquement.

Attends, si ce que tu veux, c’est disposer d’une seule base d’utilisateurs sur tes deux OSs avec pour chaque compte à la fois des éléments de config windows et linux, il y a d’autres moyens que d’entretenir en parallèle deux authorités d’authentification. Tu peux par exemple centraliser tes comptes sur l’AD, et dire à linux de prendre ses comptes et ses groupes dessus pour l’ouverture de session ou tout ou partie des authentification dont il peut avoir besoin (ftp, ssh ou login, etc…).
Au contraire, tu peux dire à ton serveur2003 qu’il est secondaire d’un nt4 et relayer les comptes définis pour linux par samba. Tu aura une authentification nt minimale, même si AMA ça marche mieux dans le premier sens ou tu crées et manipules ensuite tes comptes AD >et< linux avec les outils windows.
Un exemple pour sécuriser les transferts wins entre un window et un linux qui authentifie sur le windows les requètes wins:
enterprisenetworkingplanet.c … hp/3502441
la fin de l’article explique brièvement comment configurer ssh pour s’authentifier avec des comptes AD, et généralise à tous les services qui utilisent PAM, donc tu peux aussi le faire pour le login du linux ou les comptes mails. Le tout individuellement.
Tu peux aussi jouer avec kerberos, windows cause trés bien le kerberos.
Enfin il y a plein d’autres solutions.

Sinon, comment fais tu pour, si j’ai bien compris, executer un script au moment de la creation d’un compte sous windows ?

Oula tout ceci me semble bien trop compliqué pour mon niveau…
Je n’execute pas de script apres avoir créé un compte sous windows, je voudrais un script pour le créer ^^

Mes scripts sont des scripts de montage de lecteurs réseau et de quelques clés de registre (les documents, favoris, mails, sont stockés sur le serveur linux)

Bon admettons alors qu’il ne me reste plus que linux et que je me débrouille pour windows…
(je tiens a les faire séparément et a ce que la commande vienne d’un autre endroit que l’un des deux serveurs d’une part pour pas qu’ils n’interagissent trop, et d’autre part pour que je n’ai pas besoin d’accéder forcément a l’une des deux plateformes pour executer mes commandes.)

A terme en fait je me connecterai en VPN a mon réseau local, pour accéder a la page php en question qui me permettrait de créer les comptes…

Je vois bien que c’est chaud pour arriver a récuperer les prompts mais c’est vraiment ca qu’il me faudrait (comme si j’étais devant l’ordi quoi…)
N’y aurait il pas des commandes qui “attendent” que le serveur demande qqch a l’utilisateur?
Il risque aussi d’avoir des problemes de cryptage si j’ai bien compris :s

Merci en tout cas de m’aider

En gros la l’idéal maintenant serait un fichier php avec mes checkbox

et si checkbox 1 est checkées

on execute script1.sh qui crée par exemple le compte ftp
si la 2 est cochée on lance script2.sh crée le user…
etc…

Bon, ben écoutes, oui, il existe des mécanismes qui simulent une frappe en entrée d’une commande ( le < ou << et le | ), ou de quoi récupèrer ce qui en ressort ( le > ou le >> et encore le | ), mais ta demande me semble malheureusement toujours aussi floue, donc je vois mal quoi t’indiquer de plus que ce qui a déjà été dit.

C’est exactement ce que je cherche… je vais essayer de mieux m’expliquer

je sais lancer des commandes via un script: mkdir partage (par exemple)
mais je ne sais pas faire une commande en plusieurs parties (c’est à dire quand je rentre la commande, on me demande autre chose!)

Ma question était de savoir comment faire pour remplir les autres demandes automatiquement.

Je prends l’exemple de l’adduser. Si je ne suis pas en invite de commande, quand je demande au script de faire un adduser, il ne me crée rien.

en effet, dans un shell quand je fais adduser -a utilisateur, il me demande un mot de passe, et plein d’autres informations ensuite, qui sont nécessaires à la création du compte.

Si tu as mieux compris et que tu me confirmes que < << et | répondent a ma demande, j’essaierai des demain.

Merci en tout cas pour ton aide :exclamation: :exclamation:

quote="shadowman69"
Je prends l’exemple de l’adduser. Si je ne suis pas en invite de commande, quand je demande au script de faire un adduser, il ne me crée rien.

en effet, dans un shell quand je fais adduser -a utilisateur, il me demande un mot de passe, et plein d’autres informations ensuite, qui sont nécessaires à la création du compte.[/quote] Si tu ne passes que le -a, effectivement, il a besoin de plus d’infos qu’il te demande, mais si tu lui passes le paramètre --quiet, que tu désactives la demande de mot de passe avec --disabled-password, et que tu spécifies tous les éléments comme arguments d’appel de adduser il ne te demandera plus rien à l’éxecution (man adduser t’en dira plus), sauf que tu te retrouveras avec un compte désactivé sans password.
Donc dans un script, il vaut mieux utiliser useradd (man useradd).
La plupart des commandes dispose d’un mode non interactif, il faut lire le manuel pour chaque.

[quote=“shadowman69”]Si tu as mieux compris et que tu me confirmes que < << et | répondent a ma demande, j’essaierai des demain.[/quote]Alors ça, c’est utile aussi de les connaitre, et tu peux en trouver une description précise dans man bash. [quote=“shadowman69”]Merci en tout cas pour ton aide :exclamation: :exclamation:[/quote]De rien, le forum est là pour ça.

Je déterre tellement ce post qu’on dirait un fossoyeur ^^

Juste pour dire que je passais par là et qu’il y a un petit langage qui permet de répondre aux prompts comme si l’utilisateur était devant la machine, ce langage c’est expect

#!/usr/bin/expect eval spawn ssh user@$myhost.example.com #use correct prompt set prompt ":|#|\\\$" interact -o -nobuffer -re $prompt return send "my_password\r" interact -o -nobuffer -re $prompt return send "my_command1\r" interact -o -nobuffer -re $prompt return send "my_command2\r" interact

source du script : http://stackoverflow.com/questions/4780893/use-expect-in-bash-script-to-provide-password-to-ssh-command

Ca pourra toujours servir à d’autres ^^