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 03/08/2017, à 15:04

chamblard

Reverse ssh dans une tache Cron

Bonjour,
Voila 2 jours (ou plus) que je galère avec un truc apparemment faisable mais que je n'ai pas réussi à faire fonctionner.
Je voudrai programmer une tache cron qui initie au démarrage d'une "machine à contrôler" (que j'appellerai "client") un tunnel ssh ou reverse ssh sur un "serveur" distant.
Le but est de pouvoir me logger à volonté sur la machine client dont je ne connais pas l'ip ni l'ouverture des ports, depuis le serveur.
Dans un terminal sa marche sans problème mais dans une tache cron impossible de trouver le solution.
pour info j'ai suivi les pages suivantes :
https://doc.ubuntu-fr.org/tutoriel/reverse_ssh

  1. Le 'Client' démarre

  2. cron exécute reverse ssh sur la machine appelée 'Serveur' :

  3. depuis Serveur : je peux me connecter à Client en ssh

on imagine que l'ip de client est variable et/ou inconnue

Ce qui marche dans un terminal du client :

ssh -i /home/user/.ssh/clef1.pub -F /home/user/.ssh/config/ssh_config -fn -N -t -R 8020:localhost:22 -p 443 usersurserveur@ip_du_serveur </dev/null

j'ai plus cas sur le serveur :

ssh -p 8020 usersurclient@localhost

Donc ca c'est OK. mais dans une tache Cron j'ai fait :
sur Client :
Via la commande "crontab -e" j'ai ajouté la ligne :

# m h  dom mon dow   command
* * * * * ssh -vvv -E /home/user/Cronssh -i /home/user/.ssh/clef1.pub  -F /home/user/.ssh/config/ssh_config -fn -N -t -R 8020:localhost:22 -p 443 usersurserveur@ip_du_serveur </dev/null

-vvv -E me permettent de logger les erreur pour le debug dans /home/user/Cronssh
-i /home/user/.ssh/clef1.pub pour préciser la clef
-F /home/user/.ssh/config/ssh_config pour préciser la config
-fn -N -t  options conseillées pour commande ssh en arrière plan.

sauf que la dans le fichier de debug j'ai :

....
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey,password).

Alors que ca marche nikel dans un terminal :-(

Trouvé sur internet pour en arriver là :

  1. indice (pour sftp) :
    https://groups.google.com/forum/#!msg/c … 5fh2vowowJ
    "Processes that have controlling terminals are given a "shortcut" to their terminal device via the /dev/tty device.

    If a process /does not/ have a controlling terminal (such as the situation with most daemon processes), then /dev/tty (for that process) does not connect to anything, and an attempt to open it will result in the "no such device" error.

    You imply that your failing sftp is running via a daemon process. If so, then it /wont/ have a /dev/tty, and sftp's attempt to open that device will fail. Commands run from the commandline have the commandline's terminal device as the controlling terminal, and thus /those processes/ can access /dev/tty.  This explains why your daemon-spawned sftp fails while your manually-spawned sftp succeeds.

    Find a way to tell your daemon-spawned sftp to /not/ open /dev/tty. This should fix your problem."

    En gros, si appel de ssh en background alors pas de terminal (TTY) associé donc impossible de saisir une passphrase, même vide !!
    Pas d'indication sur comment faire :-(

  2. idée :
    https://stackoverflow.com/questions/228 … en-dev-tty
    ne pas executer en arrière plan ,rentrer la passphrase (vide!) et envoyer en arrière plan.
    -> pas compatible avec mon utilisation

  3. autre solution (relatif à 2-):
    https://www.centos.org/forums/viewtopic.php?t=53265
    -> j'ai essayé avec ssh-agent mais idem

Avez vous une idée pour m'aider à résoudre mon problème ???
Merci a tous pour votre aide ;-) et bonnes vacances

Hors ligne

#2 Le 03/10/2017, à 09:44

chamblard

Re : Reverse ssh dans une tache Cron

Coucou un petit up sur ce sujet smile
Est-ce qu'il y a des experts ssh ?
Merci d'avance à tous wink

Hors ligne

#3 Le 03/10/2017, à 12:54

JujuLand

Re : Reverse ssh dans une tache Cron

J'ai résolu le problème d'une manière différente coté serveur:

1) Installation de exim4 et curl

sudo apt-get install exim4 curl

2) paramétrage de exim4:

sudo nano /etc/exim4/update-exim4.conf.conf
dc_eximconfig_configtype='satellite'
dc_local_interfaces='127.0.0.1'
dc_readhost='nom_machine'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='serveur_smtp'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_home'
dc_return_path='mon mail'
dc_other_hostnames=''
CFILEMODE='644'

3) Paramétrage de /etc/email-addresses:

 sudo nano /etc/email-addresses
#user: someone@isp.com
#otheruser: someoneelse@anotherisp.com
<user>: <mail_user>

4) Mise à jour de la config exim4:

sudo update-exim4.conf

5) Redémarrage de exim4

sudo service exim4 restart

6) Modification de ~/.profile

echo "MAINTENANCE='mail du mainteneur' >> ~/.profile

7) Ajout de scripts pour récupérer les adresses ip publiques et locale dans /usr/local/bin:
myipl

alain@aupeix-GX723:/usr/local/bin$ cat myipl
#!/bin/bash

export LOCAL_IP=$(ifconfig eth0|grep 192 |cut -d: -f2 | awk '{print $1}')
if [ "$LOCAL_IP" = "" ]
then
   sleep 2
   export LOCAL_IP=$(ifconfig wlan0|grep 192 |cut -d: -f2 | awk '{print $1}')
fi
echo $LOCAL_IP

Remarque, dans les dernières versions de linux, on n'utilise plus eth0 ou eth1 mais un nom différent (voir avec un ifconfig -a) .
myipp

alain@aupeix-GX723:/usr/local/bin$ cat myipp
#!/bin/bash

export PUBLIC_IP4=$(curl -4 icanhazip.com 2> /dev/null)
echo $PUBLIC_IP4
export PUBLIC_IP6=$(curl -6 icanhazip.com 2> /dev/null)
echo $PUBLIC_IP6

myip

alain@aupeix-GX723:/usr/local/bin$ cat myip
#!/bin/bash

myipl
myipp

sendipp

alain@aupeix-GX723:/usr/local/bin$ cat sendipp
if test -z $MAINTENANCE;then
   export MAINTENANCE=<mon adresse mail>
fi
if test -z $USER;then
   export UTIL=<nom du user>
else
   export UTIL=$USER
fi

. $(which myipl)
. $(which myipp)

echo "##2 ;$UTIL@$(hostname) ;$(date +'%Y-%m-%d %k:%M') ;$PUBLIC_IP4 ;$PUBLIC_IP6 ;$LOCAL_IP" |mail -s "@@$UTIL@$(hostname) $(date +'%Y-%m-%d %k:%M')" $MAINTENANCE

8) Ajouter sendipp à l'autostart
9) Au cas où le serveur a une IP fixe et reste allumé 24h/24h, j'utilise le cron (c'est aussi la raison du test de $USER dans sendipp)

jacques@gadel-pc2:~$ crontab -l
30  8 * * * MAILTO="" /usr/local/bin/sendipp
30 20 * * * MAILTO="" /usr/local/bin/sendipp

Ceci permet de voir si l'ordi est toujours allumé.
10) Le mail reçu peut avoir cet aspect
Si le serveur a des adresses IP V4 et IP V6:

@@alain@aupeix-GX723 ;2017-09-29 14:02              Aupeix Alain (wanadoo)             29/09/2017 14:02
##2 ;alain@aupeix-GX723 ;2017-09-29 14:02 ;86.250.150.9 ;2a01:cb19:8b20:8f00:9d42:6d88:334b:46c3 ;192.168.1.10

Si le serveur a une adresse IP V4 et pas d'IP V6:

@@jacques@gadel-pc2 ;2017-09-29 08:00             Jacques (gadel)                    29/09/2017 08:00
##2 ;jacques@gadel-pc2 ;2017-09-29 08:00 ;80.12.127.228 ; ;192.168.1.11

Remarques:
- Les @@ en début du titre des mails me permettent d'utiliser une règle qui me permet de rediriger ce type de mail dans un dossier de thunderbird (Maintenance, pour la petite histoire)
- Les ##2 du texte du mail me permettent de faire la distinction de deux types de contenus (ici la dernière qui prend en compte les adresse mail ipv6).
- Tout le reste du contenu est traité par un outil de ma fabrication me permettant des connexions aisées pour la maintenance sur la trentaine d'ordis que je maintiens.
 
Avec ça, tu devrais te connecter sans problème ... avec, à mon avis moins de risque puisque la connexion est supprimée dès qu'on ferme les terminaux ouverts en ssh.

A+

Dernière modification par JujuLand (Le 04/10/2017, à 09:41)


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 09/10/2017, à 13:02

chamblard

Re : Reverse ssh dans une tache Cron

OK super merci, je regarde ca bientôt ! smile

Hors ligne

#5 Le 01/12/2017, à 11:54

JujuLand

Re : Reverse ssh dans une tache Cron

Petite correction de sendipp, pour utilisation par le cron.

Voir https://forum.ubuntu-fr.org/viewtopic.php?id=2018437

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