Preciso me deslocar para um servidor intermediário?

11

Não posso entrar diretamente em um host específico. Para mover um arquivo da minha máquina doméstica para o host, eu preciso passar um arquivo para um host intermediário; ssh no hospedeiro intermediário; e sftp o arquivo para o destino final. É possível evitar essa loucura?

    
por user74094 26.03.2011 / 23:24

5 respostas

27

Na sua máquina local, você pode criar um túnel SSH através do host intermediário para o host final:

ssh user@intermediate -L 2000:final:22 -N

Isso abrirá a porta 2000 em seu host local que se conectará diretamente ao servidor final na porta 22, através de tunelamento através do host intermediário. Agora, em outro prompt, conecte-se com o sftp na porta 2000 para ser tunelado até o servidor final, observando que o usuário especificado aqui é para o host final:

sftp -P 2000 user@localhost

Parece que isso pertence a superuser.com ou serverfault.com embora.

    
por 26.03.2011 / 23:53
14

Você pode usar a opção ProxyCommand do SFTP para encapsular de forma transparente uma conexão SFTP através de uma conexão SSH (um pouco semelhante à resposta do WhiteFang34, mas sobre o stdout stdin da conexão SSH, em vez de uma porta TCP local encaminhada):

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(Supondo que o host intermediário tenha o netcat instalado como / usr / bin / nc - se não, você pode ter que encontrar / instalar alguma forma equivalente de gateway stdin & stdout em uma sessão TCP.)

O que é realmente interessante nessa opção é que você pode adicioná-la ao seu arquivo ~ / .ssh / config, o que a torna transparente:

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

Com essa entrada, você pode usar o sftp, o scp e o ssh para o host final, e chamará automaticamente o túnel. A única parte não transparente é que ele solicitará duas senhas (intermediahost seguido por finalhost), mas se você quiser, pode eliminar isso também com os pares de chaves SSH ...

    
por 27.03.2011 / 01:08
3

Você pode enviar dados para o processo ssh em execução na sua máquina, em seguida, executar um comando na máquina intermediária que lê stdin e enviá-lo para o sftp, conforme apropriado.

Isto pode ser feito em um oneliner em sua máquina local, embora a citação de argumentos para o ssh exija cuidados. Estou no meu telefone agora, então infelizmente não consigo digitar os detalhes. Talvez alguém possa completar essa resposta como um exercício!

    
por 26.03.2011 / 23:29
0

Estou assumindo que o host final é protegido por firewall e só posso adivinhar os métodos que você pode usar para contornar isso.

Por exemplo - exponha o ssh da sua máquina local, depois o ssh para o primeiro host, depois o ssh para o segundo e o sftp do host final para a sua máquina.

    
por 26.03.2011 / 23:28
0

dizemos que A e B são o primeiro e o segundo hosts. E o arquivo a ser copiado é foo

Em vez de sftp, você pode usar o seguinte

cat foo | ssh Um "gato - > foo"

Agora, você pode encadear dois desses conjuntos juntos

cat foo | ssh Um "cat - | ssh B \" cat - > foo \ ""

    
por 26.03.2011 / 23:58