Sei que essa é uma resposta tardia, mas acabei de descobrir uma maneira legal de fazer isso. É basicamente a resposta de Holger Just, mas em um arquivo de configuração salvo:
Você precisa colocar isso em seu ~/.ssh/config
arquivo em local.machine (criando o arquivo se ele não existir)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
Depois de salvar o arquivo, você pode apenas usar
ssh target.machine
a qualquer momento que você quiser se conectar. O Scp também funcionará, pois também respeita o arquivo de configuração ssh. O Nautilus também, se você estiver usando o GNOME e quiser usar uma GUI.
Host proxy.machine
linhas no mesmo~/.ssh/config
arquivo; 2) Mencione se esses comandos podem ser aninhados (ou seja, o cliente se conecta ao host 1 do proxy que se conecta ao host 2 do proxy ao qual se conecta. ..target) e 3) Quenc %h %p
meiosVocê pode fazer isso em um comando, mas precisa do netcat (nc) instalado na máquina proxy:
[EDIT: misturou a ordem das máquinas ...]
fonte
Agora você pode * fazer isso como uma linha, sem precisar de
nc
nenhum lugar:Explicação
pcreds
etcreds
representam o proxy e de destino credenciais, se necessário (username
,username:password
, etc.).Isso é possível devido a uma capacidade interna do tipo netcat, removendo o requisito
nc
no host intermediário. O usossh -W host:port
configura um túnel para o host e a porta especificados e o conecta ao stdin / stdout e, em seguida,scp
passa pelo túnel.O
%h
e%p
noProxyCommand
são substituídos pelo host e porta de destino que você especificar.Para ainda mais comodidade, você pode configurar o proxy na sua configuração ssh:
e a partir de então basta
* desde o OpenSSH 5.4 - lançado em março de 2010
fonte
-p <portnum>
antes da-W
em um ou outro método para especificar a porta proxySe você não se importa em usar o rsync em vez do scp, pode usar o seguinte recurso:
(você precisará de acesso sem senha à máquina proxy)
fonte
OK, na verdade dois comandos ...
fonte
8080
-p <portnumber>
ao seu comando sshUm one-liner? Não é do alto da minha cabeça. Você precisa estabelecer um proxy primeiro e não pode fazer isso com o scp sozinho.
Ao fazer isso manualmente, abro uma sessão de tela para o meu túnel:
screen -S tunnel
A tela é usada para manter o túnel em um shell de plano de fundo. Use qualquer técnica que você queira manter o túnel aberto em segundo plano (a resposta de @ weeheavy é provavelmente a mais simples). Uma vez na sessão de tela, inicio meu túnel dessa maneira
ssh -L 2222:target.machine:22 [user@]proxy.machine
Para resumir, isso basicamente diz "Na minha máquina local, abra a porta 2222 e qualquer conexão que atinja localhost: 2222 é proxy através do proxy.machine para target.machine: 22"
Depois de estabelecer a conexão e o túnel ssh, desconecte da sessão da tela com "Ca d". Para voltar à sessão de tela, digite
screen -raAd tunnel
Quando você voltar ao shell original, seu comando scp se parecerá com
scp -P 2222 localhost:your/file/on/target.machine local/path
Lembre-se de que a porta 2222 do host local é realmente apenas um túnel para o target.machine.
fonte
Parece que o scp suporta a opção "-o", assim como o ssh, embora não tenha certeza de como passar um nome de usuário / senha de proxy:
Se você conseguir
nc: invalid option -- X
ver https://stackoverflow.com/a/23616021/32453fonte
E se:
fonte
Você pode tentar algo como:
Mas não funcionará se o proxy.machine precisar solicitar sua senha (que o SSH não está em um TTY, portanto, o askpass falhará).
Se você tiver mais de um arquivo, poderá usar o tar assim (não testado, eu geralmente uso um netcat dessa maneira):
fonte
Outra solução simples para transferir um arquivo de origem do host de origem para um host de destino por meio de um host proxy :
Efetue login no proxy_server :
No servidor proxy, transfira o arquivo_de_origem do host_de_arquitetura para o host_de destino (você pode digitar isso como uma linha, omitindo a
\
ou como duas linhas, conforme mostrado abaixo):Isso requer que o logon no host_da_arquitetura no proxy_host use uma rsa_key.
fonte
Caso você precise usar chaves públicas, precisará de algo assim.
fonte
Eu segui este artigo e encontrei uma resposta que funciona para mim. (Porque as respostas acima não funcionam para mim).
Como fazer
scp
um arquivo através de um host intermediário (também conhecido como jump host) http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.htmlE minha resposta é a seguinte:
Exemplo:
Espero que esta resposta possa ajudá-lo.
fonte