Je voudrais écrire un script qui obtient en argument une adresse IP d'ordinateur local (sur le réseau du serveur ssh) et transmet le port 5900 de l'ordinateur du client à cette adresse IP: 5900 du réseau du serveur.
Juste après l’établissement de la connexion, j'aimerais exécuter vnc viewer et me connecter à cet hôte distant, à l’aide du port transféré.
Le script que j'ai créé est le suivant:
#/bin/bash
ssh -L 5900:${1}:5900 user@server-ip
vncviewer 127.0.0.1:5900
Et cela devrait être utilisé comme ça:
Disons que nous avons sur le réseau du serveur un ordinateur avec l'adresse IP 10.0.0.10, pour exécuter la commande suivante:
vnc-ssh-script 10.0.0.10
sur mon ordinateur personnel (client) est censé ouvrir le visualiseur vnc et me permettre de contrôler l’ordinateur du réseau local 10.0.0.10 (qui exécute bien sûr le serveur vnc).
Le seul problème est qu'après l'exécution de la première ligne du script (ssh -L 5900: $ {1}: 5900 utilisateur @ serveur-ip), la connexion est établie et la commande suivante (vncviewer 127.0.0.1:5900) gagnée ' t être exécuté jusqu’à la fermeture de la session ssh ...
Ma question est comment puis-je établir la tâche que je veux?
J'ai déjà essayé d'ajouter '&' après la commande ssh, mais quand j'exécute le script, le message suivant s'affiche:
"Le psedo-terminal ne sera pas attribué car stdin n'est pas un terminal."
et il semble que ssh soit automatiquement fermé (et même si cela fonctionnait, j'aurais une indication qu'il a réussi avant d'exécuter la commande vncviewer).
Vous devez coller la connexion SSH en arrière-plan. La perluète à la fin de la commande fait cela et je passe également l'indicateur N pour arrêter un shell s'exécutant sur l'extrémité distante (enregistre une poignée de ressources et empêche SSH de ne plus savoir si une console est connectée):
#/bin/bash
ssh -NL 5900:${1}:5900 user@${1} &
sleep 1
vncviewer 127.0.0.1:5900
J'avais l'habitude de faire quelque chose de similaire mais d'exécuter x11vnc sur l'ordinateur distant, à la demande. Cela a eu l'effet secondaire supplémentaire suivant: x11vnc était en cours d'exécution ... Et cela s'arrête après la première déconnexion (souhaitable!):
#/bin/bash
ssh -L 5900:${1}:5900 user@${1} "x11vnc" &
vncviewer 127.0.0.1:5900