Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/09/2016, à 18:18

JujuLand

Execution distante d'un script en nohup

Bonjour,

J'utilise la commande suivante qui fonctionne tout à fait correctement:

ssh -p <sPortSSH> <distant_user>@<distant_public_IP> '<distant_script>'

J'aurais aimé pouvoir utiliser un script qui requiert d'être en sudo

Possible ?

Merci
A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#2 Le 17/09/2016, à 23:48

mikael8349

Re : Execution distante d'un script en nohup

Bonsoir,

ssh -p port -t user@host 'sudo script.bash'

Dernière modification par mikael8349 (Le 17/09/2016, à 23:49)

Hors ligne

#3 Le 18/09/2016, à 00:04

jplemoine

Re : Execution distante d'un script en nohup

JujuLand a écrit :

Possible ?

Oui mais non...(ou plutôt non mais oui)
En fait, pour se connecter en root, il faut se connecter avec un utilisateur "normal" puis faire un sudo qui nécessite d'écrire un mot de passe....
Le plus simple est, je pense, d'autoriser la connexion de root mais par échange de clé et non pas par mot de passe (pour des raisons de sé&sécurité).
La commande fonctionne alors avec <distant_user> = root.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#4 Le 18/09/2016, à 08:45

mikael8349

Re : Execution distante d'un script en nohup

Du même avis que jplemoine

Hors ligne

#5 Le 18/09/2016, à 11:45

Sciensous

Re : Execution distante d'un script en nohup

par contre je me demande:
- pourquoi nohup dans la question ?
- ne vaut-il mieux éviter d'être en utiisateur root distant ?
Utiliser sudo d'accord en ayant autorisé le programme dans sudoer avant
Et attention, si le pc distant n'est pas ubuntu, mais une debian: penser à y installer sudo dessus


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#6 Le 18/09/2016, à 12:10

jplemoine

Re : Execution distante d'un script en nohup

Sciensous a écrit :

- pourquoi nohup dans la question ?

Parce que certainement que le but est de lancer le script et de se déconnecter sans attendre la fin du script

Sciensous a écrit :

- ne vaut-il mieux éviter d'être en utiisateur root distant ?

Oui. C'est pour cela qu'il faut neutraliser l'utilisation des mots de passes et configurer un échange dé clé. Seul les clients ayant la clé pourront y accéder.

Sciensous a écrit :

Utiliser sudo d'accord en ayant autorisé le programme dans sudoer avant
Et attention, si le pc distant n'est pas ubuntu, mais une debian: penser à y installer sudo dessus

Il faut peut-être utiliser su et non sudo : le principe reste le même.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#7 Le 18/09/2016, à 16:27

JujuLand

Re : Execution distante d'un script en nohup

Bonjour,

Evidemment, je n'autorise que la connexion par clé (pas de connexion mot de passe) et je n'utiise pas le port 22

Pour le moment je n'autorisais pas la connexion root, mais je pense que c'est cette solution que je vais utiliser pour ce type de fonction. J'utilise nohup évidemment pour me dégager immédiatement de la connexion.
Je le faisait déjà pour des scripts ne nécessitant pas sudo, mais n'avais pas encore trouvé le moyen  de le faire pour du sudo.

Donc, si j'ai bien compris, ma syntaxe fonctionnera (sans le sudo) dans la mesure où j'utilise root comme ident de connexion ?

Merci
A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#8 Le 18/09/2016, à 16:54

JujuLand

Re : Execution distante d'un script en nohup

Bon, je viens d'essayer, et ça ne sembla pas ok:

gnome-terminal -x ssh -p <port> root@<adresse ip> "misajour" &

Le terminal s'ouvre et se ferme immédiatement, alors que j'ai mis un read à la fin du script.
Sur un script non sudo, çà fonctionne, je vois la sortie et çà attend une réponse au read.

Dans le sshd_config, j'ai çà, et je ne comprends pas trop ce que je dois changer:

PermitRootLogin prohibit-password

J'ai essayé çà :

PermitRootLogin yes

mais ce n'est pas meilleur.

Vos avis ?

Merci
A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#9 Le 18/09/2016, à 17:14

jplemoine

Re : Execution distante d'un script en nohup

Essaie déjà de te connecter "normalemen" mais avec root.
Ensuite essaie de lancer le script
Quand je lance :

xfce4-terminal -x ssh -p 22 root@192.168.0.250 "misajour" &

avec l'adresse IP qui n'existe pas (pour simuler une non coonnexion), ça ouvre un terminal et ça le referme.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#10 Le 18/09/2016, à 18:15

JujuLand

Re : Execution distante d'un script en nohup

Bon, le problème n'est pas un problème d'adresse ip, mais de clé probablement:

Permission denied (publickey).

J'ai donc créé une clé pour root :

sudo su
ssh-keygen

J'ai ensuite récupéré la clé, et sur le serveur:

sudo su
mkdir /root/.ssh
cat *.pub > /root/.ssh
chmod 700 /root/.ssh
chmod 600 /root/*

Tentatives de connexion:

alain@Gramps-JujuLand:~$ssh -p 22461 root@192.168.1.33
Permission denied (publickey).

alain@Gramps-JujuLand:~$ sudo ssh -p 22461 root@192.168.1.33
The authenticity of host '[192.168.1.33]:22461 ([192.168.1.33]:22461)' can't be established.
ECDSA key fingerprint is 2a:1a:ec:57:14:4a:02:66:2c:df:67:f1:28:9c:bf:a3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.1.33]:22461' (ECDSA) to the list of known hosts.
Permission denied (publickey).

J'ai supprimé le known_host mais c'est pareil ..

De plus, maintenant, il me refuse aussi la connexion utilisateur ... sad

A+

Dernière modification par JujuLand (Le 18/09/2016, à 18:17)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#11 Le 18/09/2016, à 18:30

JujuLand

Re : Execution distante d'un script en nohup

Bon, je ne sais pas trop ce qui c'était passe, mais j'ai retrouvé la connexion user

Par contre, mon script execute çà:

sudo apt-get update
read
sudo apt-get dist-upgrade
read

Le sudo est superflu, si on est en 'sudo su' ou en connexion ssh root, mais ne devrait pas gêner ...
Par contre, je suis en train de faire touner un script d'install de debs, et donc, il devrait me dire qu'il y a un verrou, et devrait attendre au premier read, et non fermer ...

De plus, j'ai essayé une connexion utilisateur mais avec un sudo devant le script et sans sudo sur le ssh, et là, c'est différent :

alain@Gramps-JujuLand:/opt/Maintsys/source$ sudo ssh -p 22461 jean-pierre@192.168.1.33 "sudo misajour"
[sudo] password for alain: 
Permission denied (publickey).

alain@Gramps-JujuLand:/opt/Maintsys/source$ ssh -p 22461 jean-pierre@192.168.1.33 "sudo misajour"
sudo: pas de tty présent et pas de programme askpass spécifié

et çà semble être la bonne piste, mais pas suffisant ...

A+

Dernière modification par JujuLand (Le 18/09/2016, à 18:38)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#12 Le 18/09/2016, à 22:25

mikael8349

Re : Execution distante d'un script en nohup

SI tu persistes dans la solution de sudo ...

JujuLand a écrit :
alain@Gramps-JujuLand:/opt/Maintsys/source$ ssh -p 22461 jean-pierre@192.168.1.33 "sudo misajour"
sudo: pas de tty présent et pas de programme askpass spécifié

et çà semble être la bonne piste, mais pas suffisant ...

Sauf erreur de ma part l'option '-t' rajouté à ta commande résout bien ton problème de 'sudo: pas de tty présent et pas de programme askpass spécifié' :

alain@Gramps-JujuLand:/opt/Maintsys/source$ ssh -t -p 22461 jean-pierre@192.168.1.33 "sudo misajour"

De plus tu n'as pas besoins de mettre des 'sudo' et 'read' dans ton script, ce qui deviendrait :

apt-get update
apt-get dist-upgrade

Pour ce qui est d'exécuter un script en nohup, installes le programme 'screen' sur ton serveur et modifies ta commande ssh de la manière suivante :
'alain@Gramps-JujuLand:/opt/Maintsys/source$ ssh -t -p 22461 jean-pierre@192.168.1.33 "screen -d -m sudo misajour"'

Rectification tu ne pourras pas utiliser la commande précedante avec sudo car le screen se mettra en attente du password. Par contre si tu fais cette commande sans le sudo, elle est bien exécuté en nohup.

Celle-ci devrait passer :

alain@Gramps-JujuLand:/opt/Maintsys/source$ ssh -t -p 22461 jean-pierre@192.168.1.33 "sudo screen -d -m misajour"

Dernière modification par mikael8349 (Le 18/09/2016, à 22:36)

Hors ligne

#13 Le 20/09/2016, à 14:26

JujuLand

Re : Execution distante d'un script en nohup

Bon, je viens d'essayer ta méthode, qui a le mérite de permettre le fonctionnement du script, mais qui ne retourne pas l'écran.

J'ai modifié le script pour qu'il n'y ait pas de blocage du process en mémoire:

#!/bin/bash

# test mis pour savoir si le script était bien lancé
echo $(ps -aef|grep misajour) > /home/jean-pierre/test.txt

apt-get update
apt-get -y dist-upgrade
apt-get -y autoremove

Au départ, il n'y avait pas d'autoremove, mais je l'ai rajouté, car le dist-upgrade était exécuté et, comme je n'avais pas d'écran, je me suis dit que le screen n'était plus nécessaire.
A l'exécution, j'avais la sortie écran smile

Je vais donc continuer mes tests, en rajoutant un read à la fin pour pouvoir visualiser au cas où je ne serais pas devant mon écran durant l'exécution.
Peut-être même que -y n'est pas nécessaire, et qu'il s'exécuterait correctement. Mon but ici n'est pas de répondre à des questions, et je préfère évidemment qu'il s'exécute entièrement automatiquement, mais pour d'autres, ce pourrait être nécessaire, et le test est intéressant.

En conclusion, pour des scripts nécessitant le sudo, il faut que le script soit lancé en sudo, et qu'il ne soit pas à l'intérieur dudit script.

Je poursuis mes tests.

Merci
A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#14 Le 20/09/2016, à 23:28

mikael8349

Re : Execution distante d'un script en nohup

Sorry, j'avais oublié l'option '-y' qui est bien nécessaire pour ne pas mettre l'exécution du 'apt-get' en attente d'une validation.

Le fait que tu n'es rien à l'écran est normal, car le script est exécuté dans un screen détaché du terminal (options '-d -m' : détaché et se ferme automatiquement à la fin de l'exécution du script). C'est ce qui te permets de pouvoir exécuter ta commande en nohup. Sinon tu es contraint d'attendre la fin de ton script et donc de garder la connexion établi. D’ailleurs cela est risqué, car si tu perds la connexion durant ton dist-upgrade, cela killera l'exécution du programme => tu risques donc de planté apt voir même ton système ! Si tu souhaites savoir si l'apt que tu as lancé c'est bien exécuté, tu peux aller voir les logs dans '/var/log/apt/*'. Tu peux aussi tracer des informations dans ton script. Voici des façons de faire :

echo "my message" >> logfile.log
# ou dans syslog (/var/log/syslog)
logger -t tagname "my message"
# ou 36 autre manières ...

Bien sur tu peux aller plus loin, en récupérant le code de retour de la dernière commande utilisé (variable spéciale du bash : '$?') pour gérer/tracer les erreurs...

Si tu veux vérifier en live que le screen exécute bien ton script :

  1. connectes toi sur ton serveur

  2. listes les screen en cours : 'screen -ls'

  3. rattaches toi au dernier screen en cours d'exécution (celui que tu as lancé donc) : 'screen -r'

  4. tu verras tes apt-get défiler ...

Voili, voilà, j'espère ne pas avoir glissé d'autre erreurs dans mes explications et commandes (je fais de mémoire et à une heure tardive .^^.).

Hors ligne

#15 Le 24/09/2016, à 11:07

JujuLand

Re : Execution distante d'un script en nohup

Bon, j'ai remis la commande indiquée :

ssh -t -p <port> <user>@<ip> "sudo screen -d -m misajour"

A des fins de test, je n'ai laissé que le update, et ai ajouté un read à la fin du script.

Demande de password
Lancement et fermeture du terminal

Quand sur le serveur, je lance la commande screen -ls,
en user :

jacques@gadel-pc2:~$ screen -ls
No Sockets found in /var/run/screen/S-jacques.

en sudo :

jacques@gadel-pc2:~$ sudo screen -ls
There is a screen on:
	26091..gadel-pc2	(01/09/2016 09:17:53)	(Dead ???)
Remove dead screens with 'screen -wipe'.
1 Socket in /var/run/screen/S-root.

Pour la commande screen -r
en user :

jacques@gadel-pc2:~$ screen -r
There is no screen to be resumed.

en sudo :

There is a screen on:
	26091..gadel-pc2	(01/09/2016 09:17:53)	(Dead ???)
Remove dead screens with 'screen -wipe'.
There is no screen to be resumed.

Soit je n'ai pas tout compris, soit ça ne fonctionne pas ...

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#16 Le 24/09/2016, à 11:31

JujuLand

Re : Execution distante d'un script en nohup

Sans sudo, j'ai la réponse :

There is no screen to be resumed

Avec sudo, j'ai la réponse :

[sudo] password for jacques: 
There are screens on:
	23697..gadel-pc2	(01/09/2016 09:17:53)	(Dead ???)
	15544..gadel-pc2	(01/09/2016 09:17:53)	(Dead ???)
	26091..gadel-pc2	(01/09/2016 09:17:53)	(Dead ???)
Remove dead screens with 'screen -wipe'.
3 Sockets in /var/run/screen/S-root.

Les screens , sans doute à cause du read s'empilent.
Il manque de toute évidence le tty, ce qui est peut-être normal, vu les param -d -m, mais pas top pour lancer le screen -r [proc.]tty[.host]

Est-ce donc bien réalisable ?

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#17 Le 24/09/2016, à 13:01

JujuLand

Re : Execution distante d'un script en nohup

Bon, je pense que je vais abandonner la possibilié de visualiser le screen.

J'ai donc modifié le script de la façon suivante:

#!/bin/bash

apt-get update
echo $(date +'%Y-%m-%d %k:%M') >> ~/.ssh/alain/automaj.log
echo "update  : $?" >> ~/.ssh/alain/automaj.log
#apt-get -y dist-upgrade
echo "upgrade : $?" >> ~/.ssh/alain/automaj.log
#apt-get -y autoremove
echo "remove  : $?" >> ~/.ssh/alain/automaj.log
echo $(date +'%Y-%m-%d %k:%M') >> ~/.ssh/alain/automaj.log
echo "----------------------" >> ~/.ssh/alain/automaj.log
chown jacques:jacques ~/.ssh/alain/automaj.log

Cà fonctionne bien en connexion ssh, mais çà ne semble pas être exécuté en nohup, vu que çà ne me crée pas de log ...

Où c'est que j'ai faux ?

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#18 Le 24/09/2016, à 15:07

JujuLand

Re : Execution distante d'un script en nohup

Bon, en détaché, le script n'est pas capable d'évaluer ~. Le script évolue donc vers :

#!/bin/bash
if [ -a /home/jacques/.ssh/alain/automaj.log ]; then
   already=1
else
   echo "#############################################################" >> /home/jacques/.ssh/alain/automaj.log
fi
echo "$(date +'%Y-%m-%d %k:%M') : update"                            >> /home/jacques/.ssh/alain/automaj.log
echo "-------------------------------------------------------------" >> /home/jacques/.ssh/alain/automaj.log
apt-get update |tee -a /home/jacques/.ssh/alain/automaj.log
echo "-------------------------------------------------------------" >> /home/jacques/.ssh/alain/automaj.log
echo "$(date +'%Y-%m-%d %k:%M') : dist-upgrade"                      >> /home/jacques/.ssh/alain/automaj.log
echo "-------------------------------------------------------------" >> /home/jacques/.ssh/alain/automaj.log
#apt-get -y dist-upgrade |tee -a /home/jacques/.ssh/alain/automaj.log
echo "-------------------------------------------------------------" >> /home/jacques/.ssh/alain/automaj.log
echo "$(date +'%Y-%m-%d %k:%M') autoremove"$                         >> /home/jacques/.ssh/alain/automaj.log
echo "-------------------------------------------------------------" >> /home/jacques/.ssh/alain/automaj.log
#apt-get -y autoremove |tee -a /home/jacques/.ssh/alain/automaj.log
echo "-------------------------------------------------------------" >> /home/jacques/.ssh/alain/automaj.log
echo "$(date +'%Y-%m-%d %k:%M') >>> FIN"                             >> /home/jacques/.ssh/alain/automaj.log
echo "#############################################################" >> /home/jacques/.ssh/alain/automaj.log
chown jacques:jacques /home/jacques/.ssh/alain/automaj.log

En connexion ssh, çà fonctionne nickel, mais en nohup ... çà ne fait rien

Pour vérifier, j'ai remis le dist-upgrade qui en a pour un certain temps, et immédiatement après le screen -l -m, j'ai lancé en connexion ssh un sudo apt-get update, et il me l'a exécuté sans broncher ... étonnant, non, d'autant que lors de mes précedents test, il me semble que çà avait fonctionné ?

Par contre, au niveau du screen j'ai çà:

jacques@gadel-pc2:~/.ssh/alain$ sudo screen -ls
There is a screen on:
	15041..gadel-pc2	(24/09/2016 13:04:56)	(Dead ???)
Remove dead screens with 'screen -wipe'.
1 Socket in /var/run/screen/S-root.

A+

Dernière modification par JujuLand (Le 24/09/2016, à 15:10)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne