SSH: encapsulamento sem shell no servidor ssh

63

Eu tenho que montar um túnel entre dois hosts.

Para isso eu uso sshdesta maneira:

ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

depois disso, faço login no meu SSH_SERVER.

Como posso evitar esse recurso ?! Eu só tenho que montar um túnel. Não preciso fazer login no meu SSH_SERVER ...

Eu tentei a opção -N, mas manteve meu shell ocupado.

Bau Miao
fonte
SSH -N -L xx: xx: xx usuário @ servidor e <- você já tentou isso antes?
12303 Lawrence
Ei, você tem razão. Eu tentei em outro host e a opção -N funciona. Então, descobri que o problema está no meu cliente ssh (não sei por que e procurarei o motivo). Muito obrigado!
Bau Miao
11
man sshmostra como: ssh -f -L 1234:localhost:6667 server.example.com sleep 10 && irc -c '#users' -p 1234 pinky 127.0.0.1 A opção -f backgrounds ssh e o comando remoto `` sleep 10 '' são especificados para permitir uma quantidade de tempo (10 segundos, no exemplo) para iniciar o serviço a ser tunelizado. Se nenhuma conexão for feita dentro do tempo especificado, o ssh será encerrado. ``
lionello

Respostas:

71

Como dito em outras postagens, se você não deseja um prompt no host remoto, deve usar a -Nopção SSH. Mas isso apenas mantém o SSH em execução sem aviso, e o shell está ocupado.

Você só precisa colocar o SSH'ing como uma tarefa em segundo plano com o &sinal:

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

Isso iniciará o encapsulamento ssh em segundo plano. Mas algumas mensagens podem aparecer, especialmente quando você tenta se conectar a uma porta que não está escutando (se o servidor apache não for iniciado). Para evitar que essas mensagens apareçam no seu shell enquanto faz outras coisas, você pode redirecionar STDOUT / STDERR para o grande vazio:

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

Divirta-se com o SSH.

Adrien M.
fonte
17
Você também pode usar a opção ssh em -fvez de &e o redirecionamento io.
tkrennwa
49

-f -N é o que você está procurando:

ssh -f -N -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER
neu242
fonte
3
Depois que o túnel é configurado, como você o fecha com esse método?
magnetik 7/12/15
@magnetik Encontrar o processo com pse killele
neu242
13
@magnetik e @ neu242 o melhor é usar "master socket" ssh -N -f -M -S /tmp/file-sock -L port:server:port_to user@...para que você possa matar a conexão mais tarde com ssh -S /tmp/file -o exit user@....(ou kill). Dessa forma, não há necessidade de ps. Você pode dizer para criar automaticamente esse arquivo em ~ / .ssh / config.
precisa saber é o seguinte
11
Quero dizer "tomada de controle" e não "tomada principal"
Metal3d 14/12/2015
8
Deve ser ssh -S /tmp/file-sock -O exit, não -o en.wikibooks.org/wiki/OpenSSH/Cookbook/...
fetsh