J'ai donc un système Ubuntu 16.04 qui est supposé exécuter un script SSH que j'ai écrit à chaque démarrage du système. C’est la première fois que je tente de le faire fonctionner, alors cela n’a jamais été le cas auparavant.
Le script est très simple:
while true; do sleep 60; ssh root@ip -i ~/.ssh/key -R xxxx:localhost:22; done
C'est à l'intérieur d'un fichier appelé autossh.sh
.
Pour que le script s'exécute automatiquement, j'ai essayé de l'inclure dans /etc/rc.local (avant la sortie 0), de l'ajouter à la liste des applications de démarrage à partir de l'interface graphique d'Ubuntu.
À chaque fois que je redémarre l'ordinateur, je constate que le script est en cours d'exécution, mais il ne mappe pas un port distant sur localhost 22 comme le prévoit la commande. Si j'exécute la commande manuellement, cela fonctionne, mais cela ne fonctionne tout simplement pas au démarrage.
Y a-t-il quelque chose d'évident qui me manque ici qui empêche ce script de fonctionner comme il se doit?
1. Le tilde (_~
_) sera résolu dans votre répertoire personnel, mais il n'a pas de signification tant que vous n'êtes pas connecté. Ce n'est pas si important selon la suggestion suivante, mais il est bon de le souligner. Réponse associée . Ma suggestion ici est de réécrire le script de la manière suivante:
_#!/bin/bash
while true; do sleep 60; ssh root@ip -i "$HOME/.ssh/key" -N -f -R xxxx:localhost:22; done
_
ou mieux utiliser _/the/full/path/to/
_ au lieu de _$HOME
_.
_-f
_ Demande à ssh de passer en arrière-plan juste avant l'exécution de la commande.
_-N
_ N'exécutez pas de commande à distance. Ceci est utile pour simplement transférer des ports.
2. Les clés SSH ne sont lisibles que par leur propriétaire, les autres utilisateurs ne peuvent donc pas les utiliser et ne peuvent pas être utilisées à l'échelle du système. Donc, ma suggestion est d'utiliser un Cron pour cette tâche.
Connectez-vous avec l'utilisateur propriétaire de la clé SSH et exécutez _crontab -e
_ (_-e
_ signifie modifier) ou utilisez _Sudo -u <user-name> crontab -e
_ (_-u
_ signifie exécuter comme l'utilisateur appelé _<user-name>
_) et ajoutez cette ligne en bas:
_@reboot /full/path/to/the/script/autossh.sh > /tmp/autossh.log 2>&1
_
Enregistrez et fermez Crontab. Cette ligne doit exécuter le script au démarrage du système et écrire n journal .
Références:
man ssh
Mise à jour: