• 0

Lancement automatique de script - Autossh


Go to solution Solved by JacquesF,

Question

Bonjour,

 

Après avoir fini presque ma configuration (Routeur 4G), j'ai besoin d'aide pour mettre en place autossh qui se lance au démarrage de NAS.

 

J'ai lu la moitié du forum et rien qui marche ou je sais pas comment configurer.

 

mon script est sshtunnel.sh

#!/bin/sh
export AUTOSSH_FIRST_POLL=30
export AUTOSSH_GATETIME=0
export AUTOSSH_POLL=60

autossh -f -N -C -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i ~/.ssh/id_rsa  user@domaine.com -R 443:127.0.0.1:443 -R 5001:127.0.0.1:5001 &

 

J'ai essayée plusieurs manip, de mettre sur crontab (mais apparemment  ne prend pas @reboot) , de mettre sur /usr/local/etc/rc.d/ ou d'utiliser le Planificateur de tâche.

 

Par contre manuellement un peiit ./sshtunnel.sh et sa démarre.

 

Si vous avez un exemple précis comment faire que autossh se lance au démarrage, merci de m'aider.

 

 

Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 1
  • Solution

Bonsoir,

Le plus souvent, c'est un problème de PATH ou de droits lors du lancement d'une commande dans un script.

L'environnement d'exécution n'est pas le même que celui de l'utilisateur (il est souvent très restreint), et il est préférable de mettre le chemin complet du programme (/bin, /usr/bin, etc... selon l'emplacement de autossh).

Et vérifier que le script est bien appelé, en créant un fichier par exemple dans /tmp (avec le résultat de la commande echo $PATH) :

#!/bin/bash
# Test de l'environnement au démarrage
echo $PATH > /tmp/resultat-boot.$$
env >> /tmp/resultat-boot.$$
exit 0

En fonction du résultat dans le fichier ($$ à la fin permet d'avoir le numéro de process en cours, ce qui rend le fichier le plus souvent unique, au moins dans le même démarrage), ça permettra d'adapter le script.

Jacques

Link to post
Share on other sites
  • 0

En effet c'etait le problème dans le chemin.

 

Il faut mettre 

PATH=/opt/sbin

en non 

PATH=/opt/sbin/autossh

 

Le script démarre correctement avec le lancement du NAS. 😀

Link to post
Share on other sites
  • 1

Bonjour,

La commande "which autossh" devrait retourner le chemin.

Si elle ne renvoie rien, c'est que le programme n'est pas dans le PATH. Dans ce cas, une commande comme find retournera la réponse :

find / -type f -name autossh

C'est toujours le même problème avec les scripts appelés par cron ou au démarrage, il est toujours préférable d'indiquer le chemin complet pour limiter à la fois les problèmes de sécurité et les soucis de ce genre.

Bonne journée

 

Jacques

Link to post
Share on other sites
  • 0

Bonsoir @JacquesF

 

dans le fichier Log,

 

autossh: command not found

 

du coup il faut connaitre le chemin de autossh, mais comment ?

 

J'ai du installer Entware pour installer autossh ou nano tout en root.

 

 

Link to post
Share on other sites
  • 0

Bonjour @JacquesF

 

Merci pour aide, la commande which autossh retourne:

/opt/sbin/autossh

 

J'ai ajouter la ligne 

PATH=/opt/sbin/autossh 

 

Toujours autossh: command not found (j'ai vidé le fichier log pour être sûr)

 

la commande find / -type f -name autossh retourne

 

/volume1/@entware/sbin/autossh

 

mais la aussi autossh: command not found

Link to post
Share on other sites
  • 0

Bizarre... mais comme ce script est appelé au boot, il est possible que tous les disques ne soient pas montés et que le raid ne soit pas accessible...

Solution 1 (pas propre) :

Éventuellement, mettre une copie du fichier autossh (avec un chmod 755 sur le fichier pour assurer ses droits d'exécution) dans le même dossier que le script et modifier le chemin de la commande pour l'adapter à l'emplacement du script, ou le placer le programme dans /bin ou /sbin qui sont toujours disponibles au boot.

On peut rajouter dans le script la commande "pwd" redirigée (avec >>) vers le fichier de log ceci permettra de savoir où est exécuté le script, et tant qu'on y est la commande "mount" redirigée comme les autres dans le log pour voir quels sont les systèmes de fichiers disponibles à ce moment.

Solution 2 (nettement préférable car c'est prévu pour ça) :

Les scripts d'exécution suivent plus ou moins le mode de fonctionnement de SystemV, et l'idéal est d'utiliser le script /etc/rc.local pour y placer les commandes à lancer au boot, ou les scripts à appeler. Ce script est le dernier à être exécuté dans le processus de démarrage du système, donc tout est opérationnel et accessible.

Voici un exemple chez moi qui me permet de monter un partage réseau situé sur un autre serveur du LAN :

root@Maison:~# cat /etc/rc.local
#/bin/sh
# Montage du partage Media du serveur
if ping -c 1 -w 1 nom.du.serveur >/dev/null 2>&1 ; then
        mount -t nfs nom.du.serveur:/partage /volume1/serveur/
fi
root@Maison:~# 

Celui-ci fait un test ping d'un paquet (-c 1) avec une attente d'un maximum d'une seconde (-w 1), si la réponse est correcte, alors on monte le partage NFS distant dans le volume1.

 

Jacques

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.