Não consigo sftp diretamente em um host específico. Para mover um arquivo da minha máquina doméstica para o host, devo enviar um arquivo sftp para um host intermediário; ssh no host intermediário; e sftp o arquivo para o destino final. É possível evitar tanta loucura?
11
Você pode usar a opção ProxyCommand do SFTP para encapsular uma conexão SFTP de forma transparente em uma conexão SSH (um pouco semelhante à resposta do WhiteFang34, mas sobre o stdin & stdout da conexão SSH, em vez de uma porta TCP local encaminhada):
(Supondo que o host intermediário tenha o netcat instalado como / usr / bin / nc - caso contrário, talvez seja necessário encontrar / instalar alguma maneira 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:
Com essa entrada, você pode usar sftp, scp e ssh para o finalhost, e ele invocará automaticamente o túnel. A única parte não transparente é que ele solicitará duas senhas (host intermediário seguido por host final), mas se você quiser, também pode eliminá-lo com pares de chaves SSH ...
fonte
exec
necessário? (Ele funciona muito bem aqui sem essa parte.)Você pode canalizar dados para o processo ssh em execução na sua máquina e, em seguida, executar um comando na máquina intermediária que lê stdin e os envia ao sftp conforme apropriado.
Isso pode ser feito em um oneliner na sua máquina local, embora a citação de argumentos para ssh exija cuidado. Agora estou no meu telefone e, infelizmente, não é possível digitar os detalhes. Talvez alguém possa completar esta resposta como um exercício!
fonte
Estou assumindo que o host final está protegido por firewall e só posso adivinhar os métodos que você pode usar para contorná-lo.
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.
fonte
digamos 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
gato foo | ssh Um "gato -> foo"
Agora, você pode encadear 2 delas juntas
gato foo | ssh Um "gato - | ssh B \" gato -> foo ""
fonte