Cópia segura do estilo uucp

5

Muitas vezes tenho o caso que eu tenho que fazer um monte de saltos para o host remoto, só porque não há roteamento direto entre o meu cliente eo host remoto. Quando eu preciso copiar arquivos de um host remoto dois ou mais saltos, eu sempre tenho que:

client$ ssh host1
host1$ ssh host2
host2$ scp host3:/myfile .
host2$ exit
host1$ scp host2:myfile .
host1$ exit
client$ scp host1:myfile .

Voltar quando o uucp ainda estava sendo usado, isso seria tão simples quanto um

uucp host1!host2!host3 /myfile .

Eu sei que há o uucp sobre o ssh, mas infelizmente não tenho os privilégios apropriados nessas máquinas para configurá-lo. Além disso, não tenho certeza se realmente quero mexer nas máquinas dos clientes.

Alguém sabe de um método que executa essas tarefas sem a necessidade de configurar muitos túneis ou implantar novos softwares em hosts remotos? Talvez algum tipo de script recursivo que se clone para todos os hosts remotos, fazendo o trabalho duro para mim?

Suponha que a autenticação ocorra com chaves públicas e que todos os hosts façam o SSH Agent Forwarding.

Edit: Eu não estou procurando uma maneira de encaminhar automaticamente a minha sessão interativa para o host nexthop. Eu quero uma solução para copiar arquivos estilo bangpath usando scp através de múltiplos saltos, sem a necessidade de instalar uucp em qualquer dessas máquinas. Eu não tenho os direitos (legais) ou os privilégios para fazer mudanças permanentes no ssh-config. Além disso, estou compartilhando esse nome de usuário e hosts com muitas outras pessoas. Eu estou disposto a hackear meu próprio script, mas eu queria saber se alguém sabe alguma coisa que já faz isso. Alterações minimamente invasivas aos hosts no caminho de acesso, simples invocação do cliente.

Editar 2: Para dar uma impressão de como ele foi feito corretamente em sessões interativas, dê uma olhada no GXPC clustershell . Este é basicamente um script Python, que se espalha para todos os hosts remotos que possuem conectividade e onde sua chave ssh está instalada. O melhor de tudo é que você pode dizer "eu posso entrar em contato com a HostC via HostB via HostA". Apenas funciona. Eu quero ter isso para scp.

    
por Alexander Janssen 05.10.2012 / 20:05

2 respostas

0

Mesmo que você mencione especificamente que isso não é o que você está procurando, vou insistir que tente isso, pois a configuração de um script em cada host no caminho para o seu destino é mais complexa e demorada.

Se você estiver no laptop host e desejar copiar algo para hospedar o servidor da Web, mas só puder acessar o servidor da web por meio do companygatweay.org, tudo o que você precisa fazer é:

laptop$   ssh -L4444 companygateway.org:webserevr:22

Isso abrirá a porta 4444 em sua máquina local diretamente para o servidor na porta 22.

copiar com o scp para o servidor da Web seria semelhante a:

laptop$    scp -P 4444 /some/files/here localhost:/to/some/files/on/webserver

para copiar do servidor da Web:

laptop$    scp -P 4444 localhost:/tmp/remote/files /home/localusername/downloads
    
por 13.10.2012 / 22:43
6

ssh host1 ssh host2 ssh host3 cat /myfile > myfile ? :)

UPD. (2014-01-20) : Recentemente me deparei com man dbclient que menciona: «…

-B endhost:endport — "Netcat-alike" mode, where Dropbear will connect to the given host, then create a forwarded connection to endhost. This will then be presented as dbclient's standard input/output.

Dropbear will also allow multiple "hops" to be specified, separated by commas. In this case a connection will be made to the first host, then a TCP forwarded connection will be made through that to the second host, and so on. Hosts other than the final destination will not see anything other than the encrypted SSH stream. A port for a host can be specified with a slash (eg matt@martello/44 ). This syntax can also be used with scp or rsync (specifying dbclient as the ssh/rsh command). A file can be "bounced" through multiple SSH hops, eg

         scp -S dbclient matt@martello,root@wrt,canyons:/tmp/dump .

Note that hostnames are resolved by the prior hop (so "canyons" would be resolved by the host "wrt") in the example above, the same way as other -L TCP forwarded hosts are. Host keys are checked locally based on the given hostname.

    
por 08.10.2012 / 22:07

Tags