ssh multi-hop… adaptando o comando para o arquivo de configuração ssh

9

Estou tentando colocar meu comando multi-hop ssh no arquivo ssh .ssh / config.

Este é o gráfico da minha conexão: laptop (estou aqui) ------ > userver ------- > estação de trabalho

Coloquei as chaves rsa pública do ssh em 'userver' e 'workstation'. Neste momento eu posso conectar digitando esta linha:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

Gostaria, no entanto, de poder usar os recursos do arquivo de configuração em ~ / .ssh / config para obter o mesmo efeito, mas usando um comando simples, que também permitiria fazer uma cópia rápida com 'scp' . O único problema é que 'userver' não tem o comando "nc" e eu não tenho superusuário lá, apenas o controle da minha pasta pessoal. No entanto, eu tentei algumas coisas:

Eu tenho este arquivo de configuração no meu laptop (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

Também outro arquivo de configuração no userver (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

Com esses arquivos de configuração, posso conectar-me como

ssh -A -t userver ssh -A workstation

que é uma melhoria, mas não é suficiente. Eu tentei adicionar outro host na minha configuração de laptops, como este:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Então, quando eu faço

ssh hop

eu recebo a seguinte saída com erros e não consigo me conectar:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

Alguma idéia?

    
por labotsirc 13.12.2013 / 16:58

2 respostas

6

O comando de que você precisa é ProxyCommand .

Você deve colocar em seu arquivo .ssh / config estas linhas:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Agora você pode se conectar à estação de trabalho do PC por meio de

  ssh worksation

Se isso não estiver claro ou se você quiser mais detalhes, sugiro que leia esta excelente introdução para ssh multi-hopping.

Editar:

você sempre pode definir um alias: em seu arquivo /home/your_name/.bashrc, adicione esta linha:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(Inseri a opção -X para que você possa executar aplicativos gráficos no servidor remoto, e vê-los localmente; se você não quiser isso, basta soltar o -X ).

    
por 13.12.2013 / 17:48
9

Eu encontrei a seguinte solução para trabalhar muito melhor do que usando o netcat ( nc ) como no outro exemplo. Com o netcat, minha conexão era muito lenta e ficava pendurada várias vezes até eu acertar algumas teclas. Além disso, você não precisa ter o netcat instalado.

Adicione o seguinte ao seu ~/.ssh/config :

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

Então você pode ssh assim:

ssh workstation

Observe também que o motivo pelo qual ProxyCommand não funciona é porque você não está recebendo o que ProxyCommand faz. ProxyCommand deve criar um canal pelo qual ssh possa estabelecer uma conexão SSL. Em outras palavras, o comando deve iniciar um processo que stdin e stdout conecte ssh a uma sshd port. Na sua configuração, você está fazendo uma conexão ssh com ProxyCommand , que conecta ssh ao shell de comando, em vez de a uma sshd port.

    
por 01.06.2015 / 21:56