ssh efetua login com um túnel através do servidor intermediário em um único comando?

4

Existe uma maneira em um único comando SSH para efetuar login via SSH em um servidor remoto que passa por um servidor intermediário? Em essência, eu preciso criar um túnel para o meu "servidor de ponte" e através do túnel para acessar o servidor remoto.

Por exemplo, estou tentando compactar o seguinte em um único comando ssh:

  1. ssh -N -L 2222: remoteserver.com: 22 [email protected]
  2. ssh -p 2222 remote_userid @ localhost

Isso funciona atualmente, mas eu preferiria poder espremer tudo em um único comando, de modo que, se eu sair do meu shell ssh, meu túnel feche ao mesmo tempo.

Eu tentei o seguinte na minha configuração, mas sem sucesso:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand  ssh -W %h:%p  [email protected]

De acordo com os comentários do @jasonwryan e do link do mulithop transparente , consigo obter o seguinte comando trabalhando:

ssh -A -t [email protected] ssh -A [email protected]

mas agora eu gostaria de empacotá-lo perfeitamente no meu arquivo .ssh / config, e não tenho certeza do que preciso usar como meu ProxyCommand. Eu vi alguns links online assim como a resposta do @ boomshadow que requer nc , mas infelizmente o servidor AIX que eu estou usando como minha máquina bridge não tem o netcat instalado nele.

    
por Eric B. 14.07.2015 / 20:26

2 respostas

6

O ProxyCommand é o que você precisa. Na minha empresa, todos os técnicos de DevOps precisam usar um "jumpstation" para acessar o restante dos VPCs. O jumpstation é controlado por acesso VPN.

Nós temos nossa configuração SSH para passar automaticamente pelo jumpstation.

Aqui está uma versão editada do meu arquivo .ssh / config:

Host *.internal.company.com
User jacob
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh -q -A jacob@company-internal-jumphost  nc -q0 %h %p

Toda vez que eu faço um 'ssh' em um servidor nesse subdomínio 'interno', ele pula automaticamente pelo jumpstation primeiro. Espero que ajude!

Editar : Se isso te ajudar, aqui está a seção inteira do .ssh / config para o VPC 'Interno' para nós entrarmos nela:

# Internal VPC
Host company-internal-jumphost
   Hostname 10.210.x.x  #(edited out IP for security)
   IdentityFile ~/.ssh/id_rsa
Host 10.210.*
   User ubuntu
   IdentityFile ~/.ssh/company-id_rsa
   ProxyCommand ssh -q -A jacob@company-internal-jumphost  nc -q0 %h %p
Host *.internal.company.com
   User jacob
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand ssh -q -A jacob@company-internal-jumphost  nc -q0 %h %p
    
por 14.07.2015 / 23:08
2

Se o OpenSSH 7.3 ou posterior for usado, você poderá usar ProxyJump da seguinte forma:

$ ssh -o ProxyJump=user1@gateway user2@remote

Se um dos usuários for omitido, o usuário local está implícito.

Uma variação no tema de login indireto é a transferência indireta de arquivos. Você pode usar scp e rsync com ssh indireto para copiar arquivos pelo servidor intermediário.

Para copiar através do gateway usando scp :

$ scp -oProxyJump=root@gateway myfile user@remote:path

Se user for omitido, o usuário local será usado.

O ProxyJump foi introduzido no OpenSSH 7.3. Uma alternativa é usar ProxyCommand :

$ scp -oProxyCommand="ssh -W %h:%p root@gateway" myfile user@remote:path

Para copiar através do gateway usando rsync :

$ rsync -av -e 'ssh -o "ProxyJump root@gateway"' myfile user@remote@path

Ou

$ rsync -av -e 'ssh -o "ProxyCommand ssh -A root@gateway -W %h:%p"' myfile user@remote@path

Parafraseando outras respostas (em super usuário ) que cobrem indireta scp e indiretos rsync em mais detalhes.

    
por 20.10.2017 / 10:08