J'ai un PC derrière un NAT qui établit une connexion SSH inverse avec mon VPC Digitalocean. J'utilise cette connexion SSH inversée de chez moi pour me connecter à mon PC de bureau (j'y suis autorisé) et copier des fichiers et faire d'autres choses importantes.
Bien que ce ne soit pas souvent, j'ai remarqué que mon PC de bureau redémarre (en raison de pannes de courant, etc.) et rompt la connexion SSH inversée qu'il a établie avec mon VPC. Dans ce type de cas, je ne parviens pas à me connecter de mon ordinateur personnel à mon ordinateur de bureau.
J'exécute le script suivant pour créer la connexion inversée + proxy dynamique pour anonymiser mon trafic (car je ne suis pas obligé de partager les informations de navigation) généré sur le PC de bureau.
autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
Il n'y a aucun moyen de réexécuter ce script sur mon ordinateur de bureau lors d'un redémarrage car je n'y suis pas physiquement. Afin de résoudre ce problème, j'ai installé la crontab suivante.
Remarque: le rev.sh
fichier contient la ligne ci-dessus. Le certificat "digitalOcean" et rev.sh est situé dans Ubuntu home
. Par conséquent, lorsque j'exécute ./rev.sh
dans mon terminal Ubuntu, j'obtiens un proxy dynamique et également l'accès au serveur ym DigitalOcean. Cette méthode fonctionne à 100%.
Cependant, lorsque j'installe le chrontab de la manière suivante, mon PC ubuntu ne fait jamais de proxy dynamique. Je peux le voir parce que lorsque je vérifie ce proxy à partir de Google Chrome, il dit que le proxy refuse la connexion.
Voici les cronejobs que j'ai essayés en tant que root cronejobs. J'ai également essayé ces derniers en tant qu'utilisateur normal, mais ils ne fonctionnaient toujours pas.
@reboot bash /home/user/rev.sh
@reboot /home/user/rev.sh
@reboot cd /home/user && ./rev.sh
J'ai ensuite installé un chrontab quelques minutes avant l'heure actuelle et j'ai attendu qu'il s'exécute.
24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh
ceux-ci n'ont pas été exécutés non plus.
Veuillez être assez aimable pour m'aider à repérer mon erreur. Il y a beaucoup de questions similaires sur ce site sur mon problème. J'ai renvoyé de nombreuses réponses par la suite, mais aucune ne semblait aider.
la source
/var/log/cron*
. À des fins de test, vous pouvez simplement écrire quelque chose comme*/2 * * * * /path/to/script
- il exécutera un script toutes les 2 minutes. Vérifiez également les e-mails de l'utilisateur exécutant cron. Est-ce root? Utilisez lamail
commande. Oh, je peux voir que vous utilisez la clé ssh? Je doute que cron job puisse le trouver si vous ne lui donnez pas un chemin complet après le-i
changement.Réponses:
Je ne sais pas si utiliser
cron
pour exécuter un script au démarrage est une si bonne idée. Une alternative que je considère plus appropriée consiste à créer un service SystemD, comme décrit ici . Créez un fichier nommé/etc/systemd/system/autossh.service
:Exécutez ensuite la commande suivante en tant que root:
la source
Quelques choses que vous pouvez essayer:
Parfois, votre chemin n'est pas entièrement défini au démarrage ou via les tâches cron, alors remplacez autossh par le chemin complet, sur mon système qui est
Le motif @reboot dépend du temps de démarrage du démon cron, il peut donc être invoqué avant que d'autres sous-systèmes (réseau?) ne soient opérationnels
Et votre exemple crontab:
ne sera invoqué que le 8 de chaque mois. Et il a un champ supplémentaire. Essayer
la source
/usr/bin
est toujours dans la valeur par défautPATH
, même pourcron
Il semble que lorsque le script est exécuté via crontab, il ne trouve pas votre certificat.
Lorsque vous, en tant qu'utilisateur, exécutez le script, il utilise le certificat de /home/ubuntu-user/.ssh / ... Cependant, lorsque le script est exécuté à partir de crontab, il s'exécute en tant que root. root prend les certificats de /root/.ssh
Vous avez donc plusieurs façons de le faire fonctionner, mais je pense que l'exécution du script en tant qu'utilisateur ubuntu dans crontab le fait.
Éditer:
assurez-vous de fournir un chemin d'accès complet pour le certificat
la source
Essayez d'utiliser
su
:Cela vous aidera-t-il avec votre problème?
la source
comme la question ne contient pas beaucoup de données, je vais recommencer à zéro avec ce que je ferais
Je mettrais toutes les configurations dans / etc / ssh / ssh_config:
Je mettrais la clé
/etc/ssh/mytunnel_key
alors j'essaierais avec une entrée cron (un service upstart / systemd serait mieux) comme ceci:
la source
Vous devez utiliser -f et exécuter une commande lorsque vous exécutez sans terminal. Voici donc un exemple:
-f le place en arrière-plan, mais le placer en arrière-plan signifie que ssh se connectera, puis se déconnectera dès qu'il aura terminé sa tâche. Vous avez donc besoin d'une tâche.
sleep 31536000 indique à ssh d'exécuter "sleep" pendant 1 an après la connexion. Pendant ce temps, vos tunnels resteront en place.
Si vous n'exécutez pas de commande, ssh se connectera, configurera le tunnel inverse sur le port 2205, et lorsque cela sera fait, il se fermera. En utilisant l'autossh, si la connexion échoue, il se reconnectera et redémarrera la veille. Même avec une connexion Internet vraiment stable, je doute qu'une année soit possible.
BTW - contrairement à ces autres jokers, je sais que cela fonctionne, car je l'ai testé car, bien sûr, je fais quelque chose de similaire et comme je le fais fonctionner maintenant, de manière très fiable, je peux vous donner la bonne réponse.
-f et "commande"
Voilà ce qui vous manque.
la source