Como faço transferências Multihop SCP entre máquinas?

Como faço transferências Multihop SCP entre máquinas?

Quero copiar um arquivo da minha máquina A para o servidor C, mas só tenho acesso ao servidor C através do servidor B.

Em vez de primeiro transferir para o servidor B, faça login e depois transfira para o servidor C. É possível transferir o arquivo diretamente com o SCP ou programas similares?

(O modo tramp do Emacs possui esse recurso para editar arquivos remotamente).

Responder1

Você pode adicionar -oopções em scpem vez de .ssh/config.

scp -o ProxyCommand="ssh $jump_host nc $host 22" $local_path $host:$destination_path

$jump_hosté o seu "servidor B" neste caso.

Responder2

Assumindo OpenSSH, adicione à sua configuração SSH em .ssh/config

Host distant
ProxyCommand ssh near nc distant 22

Isso fará com que o SSH seja capaz de se conectar "diretamente" à máquina chamada distante, fazendo proxy através da máquina chamada próxima. Ele pode então usar aplicativos como scp e sftp para a máquina distante.

Para que isso funcione, você precisa de 'nc', também conhecido como netcat, instalado na máquina chamada próxima. Mas muitos sistemas modernos já o terão.

A solução tar do towo é mais eficaz para problemas únicos, desde que você tenha memorizado a sintaxe e as regras de operação do tar.

Responder3

Com versões mais recentes do ssh no servidor próximo à máquina (B), o seguinte funcionará sem o netcat:

Host distant
    ProxyCommand ssh near -W distant:22

No entanto, será necessário que AllowTcpForwarding seja sim (o padrão) na máquina próxima (B)

editar: requer OpenSSH 5.4+ em B

Responder4

É possível e relativamente fácil, mesmo quando você precisa usar certificados para autenticação (típico em ambientes AWS).

O comando abaixo copiará os arquivos de remotePathon server2diretamente para sua máquina em localPath. Internamente, a solicitação scp é proxy via server1.

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

O contrário também funciona (fazer upload do arquivo):

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" <localpath> user2@server2:/<remotePath>

Se você usar 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 em ambos os servidores:

scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>

A -Wopção é incorporada em versões mais novas (mais) do OpenSSH, portanto, isso funcionará apenas em máquinas que possuem a versão mínima (5.4, a menos que sua distribuição tenha portado algum recurso; por exemplo, RHEL6 OpenSSH 5.3p1 inclui esse recurso). De acordo com as notas de lançamento:http://www.openssh.com/txt/release-5.4

Adicionado um 'modo netcat' ao ssh(1): "ssh -W host:port ..." Isso conecta stdio no cliente a uma única porta de encaminhamento no servidor. Isso permite, por exemplo, usar ssh como ProxyCommand para rotear conexões através de servidores intermediários.

%he %psão espaços reservados para o host e a porta.

informação relacionada