ssh multi-hop… comando de adaptação ao arquivo de configuração ssh

10

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

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

Eu coloquei as chaves ssh public rsa 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 alcançar o mesmo efeito, mas usando um comando simples, que também me permitiria fazer cópias rápidas com 'scp'. O único problema é que 'userver' não possui o comando "nc" e eu não tenho superusuário lá, apenas controle da minha pasta pessoal. No entanto, 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 eu posso conectar como

ssh -A -t userver ssh -A workstation

o que é uma melhoria, mas não é suficiente. Tentei adicionar outro host na configuração dos meus laptops, assim:

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 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 ideia?

labotsirc
fonte

Respostas:

6

O comando que você precisa é ProxyCommand.

Você deve colocar no 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 conectar-se à 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 você leia esta excelente introdução ao ssh multi-hopping.

Editar:

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

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

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

MariusMatutiae
fonte
Oi MariusMatutiae, eu tentei sua solução, mas como eu disse no post original o nó 'userver' não possui o programa netcat (nc). Então, eu recebo este erro: ssh workstation bash: nc: command not found ssh_exchange_identification: Conexão fechada por host remoto
labotsirc
Você não pode instalá-lo?
MariusMatutiae
Infelizmente não, eu não tenho superusuário em 'userver', é por isso que eu estava tentando um método alternativo. Eu não entendi, se isso funciona "ssh -A -t userver ssh -A estação de trabalho", por que o mesmo colocado no ProxyCommand não funciona?
labotsirc
11
@labotsirc Alterei ligeiramente minha resposta. Espero que você possa achar útil. Como alternativa, você pode tentar instalar o netcat localmente (ou seja, apenas para você!), Adicionando na linha Proxycommand .... o caminho completo para sua própria cópia do netcat. Não sei se isso funciona, por causa das permissões, mas você pode tentar.
MariusMatutiae
Copiei meu binário netcat, removi a opção -q0 porque estava dando erros e agora funciona! Graças
labotsirc
10

Eu achei a solução a seguir muito melhor do que usar netcat ( nc) como no outro exemplo. Com o netcat, minha conexão era muito lenta e travava repetidamente até eu pressionar 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 a razão pela qual você ProxyCommandnão funciona é porque você não está recebendo o que ProxyCommandfunciona. ProxyCommanddeve criar um canal sobre o qual sshpossa fazer uma conexão SSL. Em outras palavras, o comando deve iniciar um processo que stdin e stdout se conectem ssha uma sshdporta. Na sua configuração, você está fazendo uma conexão ssh com a ProxyCommandqual se conecta sshao shell de comando e não a uma sshdporta.

jcoffland
fonte