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 02/11/2015, à 18:09

JujuLand

Execution de script distant avec ssh

Bonjour,

J'aurai besoin de pouvoir exécuter un script distant, et que celui-ci aille à terme, même s'il y a déconnexion.
J'ai deux solutions trouvées sur le net, mais qui ne fonctionnent pas car la commande nécessite un sudo.

Le script à exécuter est très simple :

#!/bin/bash

sudo apt-get update
sudo apt-get -y dist-upgrade

Les commandes trouvées sont les suivantes:

gnome-terminal -x ssh -X -p <PortSSH> <User>@<ip> screen -dm <script>
ou
gnome-terminal -x ssh -X -p <PortSSH> <User>@<ip> nohup <script>

Le problème vient principalement du sudo.
Si je n'insère pas le sudo, j'ai des messages d'erreur pour la non présentation du mot de passe
Si je l'insère après le screen, je n'ai pas accès à l'écran pour pouvoir rentrer le mot de passe, et il ne fait rien
Si je l'insère avant le script, c'est pareil

C'est pareil, semble-t-il avec le nohup

Sachant que je ne veux pas autoriser la connexion en root, bien évidemment.
Le problème est-il soluble dans l'eau, ou devrais-je me passer de cette fonctionnalité ?

Merci de vos lumières.
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 02/11/2015, à 18:49

maxire

Re : Execution de script distant avec ssh

Salut,

Pour régler le problème de demande de mot de passe, désactiver la demande de mot de passe pour user et commande apt-get dans /etc/sudoers de machine <ip>

<user> ALL=NOPASSWD: /..../apt-get # ---> ligne à ajouter dans /etc/sudoers

Remplacer /.../ par le chemin vers apt-get

Et au lieu de screen ou nohup pourquoi pas quelque chose de ce genre

gnome-terminal -x ssh -X -p <PortSSH> <User>@<ip> <script> &

Le script est alors lancé en arrière-plan.


Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail

Hors ligne

#3 Le 02/11/2015, à 22:03

JujuLand

Re : Execution de script distant avec ssh

J'y avait pensé, mais à priori, si je connais ce script, et il ne concerne que apt-get, je ne connais pas pour le moment tous les scripts que je pourrais avoir à lancer, et de plus, çà me semble pas top de désactiver la demande de mot de passe pour le user.
Mais bon, c'est peut-être ce que je ferai ...
Pour le commande que tu me proposes, j'ai l'impression que si elle sera bien en arrière-plan, je me demande si elle se poursuivrai si j'ai la connexion qui tombe ...

En fait, sur une connexion classique en ssh, j'ai déjà l'habitude de lancer ce script, mais j'ai eu deux fois le cas où un plein téléchargement, je perde la connexion avec le distant (toujours le même), je ne sais pas s'il passe en hibernation ou si ma connexion tombe, mais c'est un peu chiant pendant un dist-upgrade, je n'aimerais pas que çà coince ensuite en recommençant.

Bon, j'essaye ta solution ...

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

#4 Le 02/11/2015, à 23:58

JujuLand

Re : Execution de script distant avec ssh

Bon, j'ai fait divers tests:

nohup script et script & donnent le même résultat, et, si on coupe la connexion, le père passe du process de la connexion ssh à 1
Le script continue donc.
screen -dm script fait de même, mais en plus, il n'y a pas besoin de fermer le terminal, dès envoi de la commancde sur le distant, la connexion est fermée, ce que je cherchais aussi.

Restait le problème du sudo.
Je pense avoir trouvé la parade:
J'ai créé le script (coté serveur, évidemment) mysudo :

#!/bin/bash

sudo ls xljksfjio 2>/dev/null     # commande bidon qui ne me sert qu'à demander le mot de passe 
screen -dm "$1"

script auquel je passe le nom de mon script nécessitant d'être lancé en sudo. Pour plus de sureté, au cas où, j'ai préféré entourer ma commande entre double-quotes.

ce qui donne ceci pour la commande lancée en ssh :

cmd=gnome-terminal -x ssh -X -p <PortSSH> <User>@<ip> "mysudo <script>"

Pour vérifier que coté serveur tout est exécuté comme je le veux, j'ai créé un petit script qui vérifie çà et que je lance avec la commande que je veux exécuter in-fine :

#!/bin/bash

. colors
while true
do
   ps -aef|grep "$1"|grep -v "grep"|grep -v "test"
   sleep 2
   echo -en "$gRed"
   date
   echo -en "$noColor"
done

Comme retour, j'ai çà :

alain@aupeix-GX723:~$ ./test misajour
lundi 2 novembre 2015, 22:30:34 (UTC+0100)
lundi 2 novembre 2015, 22:30:36 (UTC+0100)
lundi 2 novembre 2015, 22:30:38 (UTC+0100)
lundi 2 novembre 2015, 22:30:40 (UTC+0100)
alain    17429     1  0 22:30 ?        00:00:00 SCREEN -dm misajour
lundi 2 novembre 2015, 22:30:42 (UTC+0100)
alain    17429     1  0 22:30 ?        00:00:00 SCREEN -dm misajour
lundi 2 novembre 2015, 22:30:44 (UTC+0100)
alain    17429     1  0 22:30 ?        00:00:00 SCREEN -dm misajour
...
lundi 2 novembre 2015, 22:35:22 (UTC+0100)
lundi 2 novembre 2015, 22:35:24 (UTC+0100)
lundi 2 novembre 2015, 22:35:26 (UTC+0100)

Bien sûr, je ne lance mysudo qu'en cas de besoin ...

Pour info, mon script misajour est le suivant :

#!/bin/bash

. colors
sudo apt-get update
echo " "
echo -e "$gCya apt-get dist-upgrade =>$noColor"
echo " "
sudo apt-get -y dist-upgrade
if [ "x$1" != "x" ]; then
   echo " "
   echo -e "$gCya Appuyez sur une touche pour fermer la fenêtre ...$noColor"
   read
fi

Pour un test complet, je vais renvoyer les sorties de apt-get update et apt-get dist-upgrade vers un fichier pour voir si tout est bien ok pour la commande que je veux en fin de compte lancer (ici misajour).
Je pense que c'est la cas, mais je suis comme Saint-Thomas ... wink

Je pense aussi qu'il est impératif que le script n'attendent aucune entrée clavier pour éviter d'avoir des process qui ne se terminent pas. C'est la raison de l'insertion d'un test en fin de misajour (car il sert aussi en mode interactif).

A+

Dernière modification par JujuLand (Le 03/11/2015, à 09:32)


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

#5 Le 03/11/2015, à 13:54

JujuLand

Re : Execution de script distant avec ssh

Les tests que je viens de faire ne sont pas concluants:

- je ne vois pas arriver de demande de mot de passe
- mon test affiche çà

mardi 3 novembre 2015, 11:12:57 (UTC+0100)
christi+  5177     1  0 10:33 ?        00:00:00 SCREEN -dm misajour

- pas de log, donc pas d"exécution
- je vois çà :

christian@felicite-X751LN:~$ screen -wipe
There is a screen on:
	5177.misajour	(03/11/2015 10:33:45)	(Detached)
1 Socket in /var/run/screen/S-christian.

Un autre test a été de faire un ps pour voir les tty utilisés sur le serveur, et surprise:

root       954     1  0 10:04 tty4     00:00:00 /sbin/getty -8 38400 tty4
root       958     1  0 10:04 tty5     00:00:00 /sbin/getty -8 38400 tty5
root       966     1  0 10:04 tty2     00:00:00 /sbin/getty -8 38400 tty2
root       969     1  0 10:04 tty3     00:00:00 /sbin/getty -8 38400 tty3
root       979     1  0 10:04 tty6     00:00:00 /sbin/getty -8 38400 tty6
root      1645     1  0 10:04 tty1     00:00:00 /sbin/getty -8 38400 tty1
root      1861  1839  6 10:04 tty7     00:09:50 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
christi+ 29509 29495  0 12:41 ?        00:00:00 sshd: christian@notty
christi+ 29514 29510  0 12:41 ?        00:00:00 grep tty
sudo: pas de tty présent et pas de programme askpass spécifié

Il semblerait que la connexionb ne soit dans ce cas pas rattachée à un tty, ce qui expliquerait la non demande de mot de passe.

J'ai donc consulté le man de ssh, et j'ai trouvé çà :

     -f      Requests ssh to go to background just before command execution.
             This is useful if ssh is going to ask for passwords or
             passphrases, but the user wants it in the background.  This
             implies -n.  The recommended way to start X11 programs at a
             remote site is with something like ssh -f host xterm.

             If the ExitOnForwardFailure configuration option is set to “yes”,
             then a client started with -f will wait for all remote port for‐
             wards to be successfully established before placing itself in the
             background.

J'ai ajouté cette option, mais pas re résultat probant ...

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

#6 Le 03/11/2015, à 14:19

cyberesprit

Re : Execution de script distant avec ssh

(message supprimé car inutile)

Dernière modification par cyberesprit (Le 03/11/2015, à 14:20)


Cyberesprit, libriste militant

Hors ligne

#7 Le 03/11/2015, à 14:20

JujuLand

Re : Execution de script distant avec ssh

Je tourne en rond.
J'ai ajouté apt-get dans sudoers, mais çà ne change rien
Si je laisse les sudo devant les commandes apt-get de mon script, il ne se passe rien.
Si je l'enlève juste sur la deuxième commande, j'ai çà qui semble tout expliquer ...

E: Impossible d'ouvrir le fichier verrou /var/lib/apt/lists/lock - open (13: Permission non accordée)
E: Impossible de verrouiller le répertoire /var/lib/apt/lists/
E: Impossible d'ouvrir le fichier verrou /var/lib/dpkg/lock - open (13: Permission non accordée)
E: Impossible de verrouiller le répertoire d'administration (/var/lib/dpkg/). Avez-vous les privilèges du superutilisateur ?
 
 apt-get upgrade =>
 
sudo: pas de tty présent et pas de programme askpass spécifié
 
 Appuyez sur une touche pour fermer la fenêtre ...

Lors de l'update, le système s'aperçoit que je ne lance pas en sudo
Lors du dist-upgrade, il s'aperçoit que je n'ai pas de tty affecté, et ne peut donc demander le mot de passe.

J'ai comme l'impression que c'est mission impossible ...

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 03/11/2015, à 14:23

JujuLand

Re : Execution de script distant avec ssh

Merci cyberesprit, j'ai eu le contenu de ton post sur mon mail, et comme tu l'as deviné, il semble que le screen ne résout rien, lorsqu'il y a une demande de mot de passe (sudo).

Si tu regardes le dernier message que j'ai posté, tu en verras probablement la raison.
Cà semble mission impossible.

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 03/11/2015, à 14:30

bruno

Re : Execution de script distant avec ssh

Il faut que tu autorises une connexion en root par clé uniquement sur ton serveur, sinon tu n'y arriveras pas.

Hors ligne

#10 Le 03/11/2015, à 15:44

JujuLand

Re : Execution de script distant avec ssh

J'ai déjà choisi de ne permettre la connexion que par clé.
Apparemment, il ne devrait pas avoir de problème majeur à autoriser une connexion root.
Mais je ne suis pas trop chaud.

Si je ne m'abuse, çà se fait par :

PermitRootLogin yes
PasswordAuthentication no

Oui ?

Et la connexion se fera avec root@<ip>

Oui ?

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

#11 Le 03/11/2015, à 15:48

cyberesprit

Re : Execution de script distant avec ssh

Oui, mais dans ce cas il faut aussi indiqué ta clef publique dans le .ssh/authorized_keys de root.

Mais effectivement, il faudrait éviter de pouvoir se connecter directement via root ...

Dernière modification par cyberesprit (Le 03/11/2015, à 15:49)


Cyberesprit, libriste militant

Hors ligne

#12 Le 03/11/2015, à 15:55

JujuLand

Re : Execution de script distant avec ssh

Comment se font les prises de main sur les serveurs ?
En root ou non ?
Le problème n'est-il pas le même ?

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

#13 Le 03/11/2015, à 15:58

cyberesprit

Re : Execution de script distant avec ssh

Les prises en mains se font en root sur un réseau local fermé, sinon généralement on passe par un utilisateur sans pouvoir et se connecte en root via su.
Personnellement, je n'ai jamais eu à faire un script pour ça, donc je n'ai pas d'expérience à ce sujet. Ça me tente bien d'essayer tient.


Cyberesprit, libriste militant

Hors ligne

#14 Le 03/11/2015, à 16:04

JujuLand

Re : Execution de script distant avec ssh

Aurtre chose, j'ai eu de nouveau le plantage de la connexion, cette fois en lançant un dist-upgrade, et en essayant de le stopper par Ctrl-C.
Après, impossible de me reconnecter en ssh
J'ai donc appelé mon copain, et lui ai demandé de relancer le serveur ssh.
Et j'ai pu me reconnecter.
Donc, ce n'était pas en tombant en hibernation comme je le supposais précédemment, mais à cause du ssh qui se plantait.

Ce qui est curieux, c'est que je n'ai eu le problème que sur cet ordi ...

A+

Dernière modification par JujuLand (Le 03/11/2015, à 16:04)


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

#15 Le 03/11/2015, à 16:17

cyberesprit

Re : Execution de script distant avec ssh

Ce n'est pas forcément un plantage ssh, mais il suffit d'un genre de déconnexion ou qu'un logiciel comme fail2ban te bloque en cours de route, et il faut attendre un (long) moment avant que le connexion ssh entre le client et le serveur reprenne si c'est possible (pas avec fail2ban à moins de l'arrêter ou le relancer).

Enfin c'est de mon expérience (et rien de pire qu'un partage ssh monté sur un client avec sshfs, qui se met à ne plus communiquer avec le serveur pour que tout ton système soit inutilisable jusqu'à ce que ça reprenne ... heureusement c'est rare, ça le fait aussi avec nfs).

Après, je me trompe peut-être.


Cyberesprit, libriste militant

Hors ligne

#16 Le 03/11/2015, à 16:24

JujuLand

Re : Execution de script distant avec ssh

Je n'utilise pas fail2ban dont j'ai entendu parlé, mais que je n'ai jamais essayé.
Je n'ai pas eu la patience d'attendre, et les fois où çà m'était arrivé, je n'avais pas donné suite , et j'avais attendu que le copain se reconnecte le lendemain ... hormis cette fois, évidemment, mais çà m'a permis de cibler ssh tout de même.

Dans le logiciel de maintenance à distance que je suis en train de mettre en place, il y a bien sur un accès possible en sshfs, mais je ne compte pas l'utiliser au travers d'internet tant que je suis en 512 Ko.

Fin 2016, on nous promet la fibre, alors, çà ira mieux ... et on verra à ce moment.

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 03/11/2015, à 16:57

bruno

Re : Execution de script distant avec ssh

Non, pour n'autoriser la connexion de root que par clé c'est :

PermitRootLogin without-password

Hors ligne

#18 Le 03/11/2015, à 17:03

JujuLand

Re : Execution de script distant avec ssh

Ah, ok

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

#19 Le 03/11/2015, à 18:08

maxire

Re : Execution de script distant avec ssh

Jujuland a écrit :

J'ai ajouté apt-get dans sudoers, mais çà ne change rien

Comment?
As-tu bien inséré ceci dans /etc/sudoers?

<user> ALL=NOPASSWD: /usr/bin/apt-get

Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail

Hors ligne

#20 Le 03/11/2015, à 20:12

JujuLand

Re : Execution de script distant avec ssh

Oui, enfin çà change un peu, mais çà ne passe pas.

Si je met le sudo, çà échoue comme précédemment
Si je ne le mets pas, çà me donne des messages d'erreur concernant la verrou qu'il ne peut pas créer (quelque chose comme çà), et ensuite deux ou trois erreurs qui en découle ...

A+

Dernière modification par JujuLand (Le 03/11/2015, à 20:13)


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