web-dev-qa-db-fra.com

SSH: tunnel sans Shell sur le serveur ssh

Je dois mettre en place un tunnel entre deux hôtes.

Pour cela, j'utilise ssh de cette façon:

ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

après cela, je me connecte à mon SSH_SERVER.

Comment puis-je éviter cette fonctionnalité?! Je n'ai qu'à installer un tunnel. Je n'ai pas besoin de me connecter à mon SSH_SERVER ...

J'ai essayé l'option -N, mais cela a occupé mon Shell.

77
Bau Miao

Comme indiqué dans d'autres articles, si vous ne voulez pas d'invite sur l'hôte distant, vous devez utiliser le -N option de SSH. Mais cela maintient simplement SSH en cours d'exécution sans invite et le shell est occupé.

Vous avez juste besoin de mettre le SSH en tâche de fond avec le & signe :

ssh -N -L 8080:ww.xx.yy.zz:80 user@server &

Cela lancera le tunneling ssh en arrière-plan. Mais certains messages peuvent apparaître, en particulier lorsque vous essayez de vous connecter à un port qui n'écoute pas (si votre serveur Apache n'est pas lancé). Pour éviter que ces messages n'apparaissent dans votre shell tout en faisant d'autres choses, vous pouvez rediriger STDOUT/STDERR vers le grand vide:

ssh -N -L 8080:ww.xx.yy.zz:80 user@server >/dev/null 2>&1 & 

Amusez-vous avec SSH.

81
Adrien M.

-f -N est ce que vous recherchez:

ssh -f -N -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

Depuis la page man ssh :

- f Demande à ssh de passer en arrière-plan juste avant l'exécution de la commande. C'est utile si ssh va demander des mots de passe ou des phrases secrètes, mais que l'utilisateur le veut en arrière-plan. Cela implique - n .

- N N'exécutez pas de commande à distance. Ceci est utile uniquement pour le transfert de ports (protocole version 2 uniquement).

- n Redirige stdin de /dev/null (en fait, empêche la lecture depuis stdin). Ceci doit être utilisé lorsque ssh est exécuté en arrière-plan.

61
neu242