Sugiro o seguinte no seu .ssh/config
:
Host C
User user
ProxyCommand ssh -W %h:%p user@B
Eu estou muito mais seguro se o host B não for confiável e funcionar para scp e sftp.
Para fazer o ssh no meu computador de trabalho a partir de casa, vamos chamá-lo de C
Eu tenho que fazer o seguinte:
ssh -t user@B ssh C
B é um servidor que eu posso conectar em casa, mas C só pode ser conectado a partir de B. Isso funciona bem.
Se eu quiser copiar um arquivo que está em C para meu computador doméstico usando scp
, qual comando eu preciso do meu computador pessoal?
Conforme descrito em esta resposta , você pode usar a diretiva ProxyCommand
para ter um host ssh
levando você a um terceiro host de forma transparente:
Digamos que você tenha os três hosts a seguir:
workstation.example.com
- Esta é a máquina em que você está trabalhando fisicamente proxy.example.com
- Esta é a máquina para a qual você está roteando seu tráfego SSH através de endpoint.example.com
- Aqui é onde você deseja que o tráfego acabe Em ~/.ssh/config
on workstation
, adicione o seguinte:
Host endpoint
User endpointUser # set this to the username on the endpoint host
HostName endpoint.example.com
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
No host proxy
, certifique-se de que nc
(netcat) esteja instalado.
Em seguida, em workstation
, você pode ssh endpoint
ou sftp endpoint
e você será transparentemente intermediado por proxy para a máquina por meio de seu host proxy. scp
também funcionará.
É possível e relativamente fácil, mesmo quando você precisa usar certificados para autenticação (típicos em ambientes da AWS).
O comando abaixo copia os arquivos de um remotePath no server2 diretamente para sua máquina no localPath. Internamente, o pedido scp é intermediado por proxy1.
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>
Se você usar a autenticação por senha, tente com
scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>
Se você usar as mesmas credenciais de usuário nos dois servidores:
scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>