Como usar o ssh para copiar um arquivo de múltiplos saltos com o encaminhamento de agentes?

3

Eu tenho um grupo de servidores todos configurados corretamente com o encaminhamento do agente SSH. É uma típica configuração de estilo de servidor de bastiões onde a única máquina da qual você pode se conectar é o servidor A. No servidor A, você pode usar o encaminhamento de agentes para conectar-se aos servidores B, C, D, etc. / p>

Às vezes eu quero copiar um arquivo da minha máquina local para o servidor B. Para fazer isso eu tenho que primeiro scp o arquivo para o servidor A. Então ssh para o servidor A e scp o arquivo para o servidor B. Então eu apago o arquivo do servidor A.

Existe uma maneira de copiar o arquivo diretamente do meu computador para o servidor B via servidor A em apenas um comando executado na minha máquina local?

    
por Apreche 02.02.2012 / 19:53

4 respostas

3

Se o seu sshd estiver configurado para permitir o encaminhamento do TCP, você poderá configurar um encapsulamento do seu computador para o B através de A e então usá-lo para copiar as coisas. Crie o túnel

ssh -f -L 2050:B:22 A -N
  • -f em segundo plano o comando ssh para que seu terminal volte a ser usado.
  • -L 2050:B22 liga a porta do host local 2050 à porta do host B 22
  • -N não executa um comando remoto.

depois, para copiar do seu computador para B

scp -P 2050 filetocopy localhost:/destination/path 

EDITAR: Se você usa

ssh -L 2050:B:22 A -N &

Em seguida, você será informado sobre o PID do comando ssh quando estiver em segundo plano.

    
por 02.02.2012 / 21:06
1

Coloque algo assim em .ssh / config:

Host B-p C-p D-p
        ProxyCommand ssh -W %h:%p A.example.com
Host B-p
        Hostname B.example.com
Host C-p
        Hostname C.example.com
Host D-p
        Hostname D.example.com

e apenas ssh ou scp para / de B-p . Você pode omitir o sufixo -p e configurar o Comando Proxy diretamente no B.example.com etc. se você estiver sempre "fora".

Isso gera uma pequena sobrecarga de tráfego entre sua máquina e o host de bastiões, mas funciona sem o encaminhamento de agentes.

    
por 30.01.2015 / 20:22
0

Você pode usar tar para copiar o arquivo:

tar cC SRC-DIR SRC-FILE | ssh A.example.com ssh B.example.com tar xC DST-DIR

Certifique-se de adicionar a quantidade correta de citações ao DST-DIR, se necessário; será interpretado por três conchas.

Usar ssh e tar é muito flexível, por exemplo, quando scp se recusa a trabalhar com dois locais remotos.

    
por 14.03.2017 / 14:27
0

Eu tenho um caso semelhante (ainda mais complexo) recentemente e consegui resolver o problema.

A resposta curta: use ProxyCommand em vez de encaminhamento pelo agente.

A longa história:

No meu caso, quatro hosts estão envolvidos:

  • desktop Linux no meu escritório
  • Servidor VPN Linux em algum lugar da Internet
  • Servidor inicial Linux no meu apartamento
  • laptop Linux no meu apartamento

O roteador no meu apartamento não recebe endereço público do ISP, portanto, os portáteis e os servidores domésticos estão atrás do NAT duplo, de maneira nenhuma eu posso fazer o encaminhamento de porta ou algo assim porque não consigo controlar dispositivos ISP. Por algum motivo, o servidor inicial está sempre conectado a um servidor VPN com endereço público. Dessa forma, posso ssh -A no servidor VPN e ssh -A no servidor inicial e, finalmente, ssh no meu laptop doméstico.

Mas às vezes eu preciso transferir arquivos. Eu não quero rsync / scp várias vezes hop por hop.

ProxyCommand vem para resgatar. Coloque isso no ~/.ssh/ssh_config :

# Host A is a VPN gateway with public address.
Host a.example.org
  HostName 1.2.3.4

# Host B is a home server / gateway with no public address.
# It's connected to host A via VPN.
Host b.example.org
  HostName 10.255.255.100
  ProxyCommand ssh -W %h:%p a.example.org

# Host C is my home laptop.
Host c.example.org
  HostName 192.168.2.100
  ProxyCommand ssh -W %h:%p b.example.org

# vim: ft=sshconfig:

Isso pode ser indefinidamente encadeado. Você pode manter o encadeamento do host D, host E, etc., desde que seus hosts tenham conexões rápidas. Não há necessidade de fazer ssh -L ou ssh -D hop pelo salto manualmente e conectar através de portas não padrão. Agora posso fazer ssh c.example.org diretamente de qualquer lugar, desde que eu possa me conectar a a.example.org . É claro que outros protocolos baseados em SSH, como Rsync, SCP, SFTP, etc., são automaticamente suportados.

    
por 24.04.2017 / 10:03