Quero copiar um arquivo da minha máquina A para o servidor C, mas só tenho acesso ao servidor C através do servidor B.
Em vez de primeiro transferir para o servidor B, efetue login e depois transfira para o servidor C. É possível transferir o arquivo diretamente com o SCP ou programas similares?
(O modo tramp do Emacs possui esse recurso para editar arquivos remotamente).
Supondo que o OpenSSH, adicione à sua configuração SSH em .ssh / config
Isso fará com que o SSH consiga conectar-se "diretamente" à máquina nomeada distante, fazendo proxy por meio da máquina nomeada near. Em seguida, ele pode usar aplicativos como scp e sftp na máquina distante.
Para que isso funcione, você precisa do 'nc' aka netcat instalado na máquina chamada near. Mas muitos sistemas modernos já o terão.
A solução de tar do towo é mais eficaz para problemas de uma só vez, assumindo que você memorizou a sintaxe e as regras de operação do tar.
fonte
near
for diferente do nome de usuário ativadodistant
, o usuário próximo entraProxyCommand ssh nearuser@near...
e o usuário distante entra em umaUser distantuser
linha separada .Nas versões mais recentes do ssh no servidor próximo à máquina (B), o seguinte funcionará sem o netcat:
No entanto, será necessário permitir que AllowTcpForwarding seja yes (o padrão) na máquina near (B)
editar: requer OpenSSH 5.4+ em B
fonte
Você pode ssh no servidor B usando algo como
Em seguida, você pode ssh no servidor C usando
Da mesma forma, o scp funcionaria usando
Lembre-se de usar o caso correto de p com scp e ssh
fonte
É possível e relativamente fácil, mesmo quando você precisa usar certificados para autenticação (típico nos ambientes da AWS).
O comando abaixo irá copiar arquivos de um
remotePath
emserver2
diretamente em sua máquina alocalPath
. Internamente, a solicitação scp é enviada por proxyserver1
.O contrário também funciona (upload de arquivo):
Se você usar a autenticação por senha, tente com
Se você usar as mesmas credenciais do usuário nos dois servidores:
fonte
Se você quer ser realmente malvado, pode encadear ssh e tar, algo assim
tar c mydir | ssh server "ssh otherserver | tar x"
, mas isso pode ter todas as mãos de problemas.A maneira mais fácil seria apenas configurar um túnel SSH com os métodos internos do SSH; observe o
-D
comutador na página de manual e encaminhe alguma porta para a porta ssh do outro servidor.fonte
Você também pode fazer isso ao contrário e talvez seja mais fácil.
Supondo que você tenha uma sessão ssh aberta com a máquina para a qual deseja enviar o arquivo. Esse PC que está mais distante, chamaremos isso de hop2. Seu host "proxy" será hop1. O PC que é a origem do arquivo, chamaremos essa origem.
Você pode construir túneis disponibilizando uma porta local em um PC remoto. Assim, definimos uma porta a ser aberta no PC remoto, que será um redirecionamento para a porta que você puxou quando construiu o túnel.
No hop2:
Agora, nessa sessão de túnel aberta, você pode fazer o mesmo do hop1 ao file_origin.
No hop1:
Agora você está no túnel do hop2 para o hop1 até a origem. Coincidentemente, agora as portas 5555 e 6666 estão abertas na origem, que são redirecionadas para a porta 22 do hop2. Nesta sessão, os seguintes são rotas scp válidas para o hop2:
Na origem:
Dessa forma, você pode ter um número arbitrário de saltos no meio, e é mais fácil trabalhar com isso em termos de encadear mais de dois saltos.
fonte
Tente adapring o exemplo a seguir openssh config para uma configuração que pode ser usada para vários hosts:
Isso pressupõe um conjunto de servidores que começam com "uat-" que são acessíveis apenas através do servidor jumpbox / gateway "bastion-uat". Você provavelmente também deseja adicionar
ForwardAgent yes
se estiver usando uma chave para fazer login.fonte
ForwardAgent yes
para isso. O encaminhamento de agente não é necessário nesse caso, porque nenhum cliente ssh estará em execução no bastião, e encaminhar um agente quando não for necessário apenas reduzirá a segurança. E acho quessh
falta o seu comando. Se umassh
versão recente estiver sendo usada, você não precisanc
, você pode digitarssh -W %h:%p bastion-uat
.Isso não é scp (solicitado pelo OP), mas achei super simples
rsync
de copiar do local para o remoto em um único salto com:Fonte: http://mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
Eu tentei a sugestão -o ProxyPass acima e não queria alterar a configuração para minhas necessidades. Como afirma o autor no link acima, o arquivo de destino que antecede dois pontos (:) é importante para indicar que o caminho especificado está no servidor de destino. Além disso, usando o rsync, você tem as opções de comparação de datas, sincronização de pastas etc. Espero que isso ajude alguém!
fonte
scp -o 'ProxyJump jumpboxname' somefilename.txt finaldestinationhost: / tmp /.
fonte