Pages : 1
#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
Le 'Client' démarre
cron exécute reverse ssh sur la machine appelée 'Serveur' :
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à :
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 :-(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 utilisationautre 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
Est-ce qu'il y a des experts ssh ?
Merci d'avance à tous
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 !
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
Pages : 1