SFTP sobre salto de servidor duplo

15

Estou tentando elaborar um método para me permitir acessar arquivos em um servidor SFTP do que não posso acessar na minha máquina local. Atualmente, eu tenho que fazer o SSH para um servidor remoto (é em um determinado bloco IP que o servidor SFTP final aceitará) e, a partir daí, SFTP para o servidor de destino. De lá, mostro getos arquivos nos quais estou interessado, soltando-os no servidor intermediário, a partir do qual posso obter os arquivos por meio de um compartilhamento Samba ou diretamente scp. Também trabalho no sentido inverso, onde solto os arquivos no intermediário, SSH nele e depois SFTP no destino e puteles nas pastas apropriadas.

Meu objetivo é encurtar isso. As infelizes restrições são que minha máquina é Windows (eu uso o KiTTy e / ou Cygwin) e não posso modificar o servidor intermediário (ou servidor de destino) de nenhuma maneira. Estou disposto a usar programas de linha de comando ou GUI, desde que funcione e seja gratuito.

Alguma ideia?

josh.trow
fonte

Respostas:

24

Em essência, sem a GUI ou outras conveniências:

ssh -o ProxyCommand='ssh myfirsthop nc -w 10 %h %p' mydestination

Você pode fazer esse padrão editando o arquivo de configuração, por padrão ~ / .ssh / config

Host mydestination, mydest2, mydest3
ProxyCommand ssh myfirsthop nc -w 10 %h %p

Isso permite que você faça

ssh mydestination
scp mydest2:file.txt ./
scp file.txt mydest3:/tmp/

Claro, com esse tipo de mágica você pode facilmente

mkdir -pv /tmp/mydest3tmp          # create mountpoint
sshfs mydest3:/tmp /tmp/dest3tmp/  # mount :)

No Windows, você usaria o WinSCP que vem com (acho que o IIRC) PLINK (da suíte Putty). Suponho que o local padrão para o configarquivo ssh seja diferente (eu precisaria pesquisar no Google), mas tenho certeza que funciona mais ou menos da mesma forma.

Observe que a única coisa que você precisa para isso funcionar é 'netcat ( nc)' no servidor do meio (primeiro salto). É uma ferramenta onipresente no linux / UNIX [1]; É muito fácil criar uma versão vinculada estaticamente que funcione se você puder copiá-la lá em primeiro lugar.

[1] observe que existem alguns sabores, portanto, a opção -w pode precisar ser eliminada / grafada diferentemente

ver
fonte
1
Senhor, não faz ideia de como isso me deixou feliz :) Perfeito!
josh.trow
@ josh.trow: Não, mas eu estou feliz que você me :) Sempre disse
sehe
Embora, como o @ josh.trow já tenha encontrado, o WinSCP tenha o recurso de encapsulamento embutido (veja a outra resposta), se você precisar realmente usar a configuração do encapsulamento por um aplicativo externo, aqui está um guia: winscp.net/eng/docs/ guide_tunnel
Martin Prikryl
9

Eu não vou definir isso como a resposta aceita, porque eu nunca a teria encontrado sem @sehe e @Jakub, mas aqui está o que eu achei que simplifica tudo ...

O WinSCP tem a capacidade de usar um túnel SSH embutido. Não sei quando esse recurso chegou, mas nunca o notei antes.

Configurações do túnel WinSCP

josh.trow
fonte
Documentação do recurso de encapsulamento: winscp.net/eng/docs/tunneling e winscp.net/eng/docs/ui_login_tunnel
Martin Prikryl
também funciona no filezilla!
Hayden Thring
esse recurso permite apenas um túnel único ... como adicionar o segundo túnel?
precisa saber é
@zeetit Então você tem que usar um túnel externo. Todas as opções de encapsulamento estão documentadas no guia WinSCP sobre encapsulamento .
Martin Prikryl
2

Uma das minhas sugestões seria criar um proxy de meias usando o putty (da sua caixa do Windows) e, em seguida, proxy do seu cliente SFTP sobre ele (por exemplo, Filezilla sftp).

Você não precisaria fazer nada de especial dessa maneira, basta ativar o seu putty socks5 proxy, ativar o filezilla e enviar seus arquivos de FTP para o servidor de destino.

(you ==socks5 proxy==> middle server) ==> destination server
Jakub
fonte
Parece que você está resolvendo um problema diferente, realmente mais difícil. O problema do OP é que o destino final não é roteável do tráfego SSH de saída do cliente. ( Eu acredito que a sua solução é necessária para o tráfego SSH 'túnel' através de um proxy? )
sehe
@sehe .. o que? Você configura um proxy SSH socks 5 (túnel ssh para a caixa do meio) e, em seguida, simplesmente proxy seu tráfego SFTP para a caixa de destino, mas disfarçando-se como o servidor do meio. Que outro problema estou resolvendo?
Jakub