Como especificar a porta para scp para um servidor remoto?

Tenho dois nós remotos que estou tentando enviar um para o outro.

scp remote1:~/testSCP [email protected]:~/ 

Eu tenho ~/ssh/config configurado em minha máquina local, então, está usando a porta 2222 por padrão.

Mas a porta ssh padrão do remote1 “s é definida como 22 na configuração do ssh em vez da porta 2222. Então, para fazer qualquer conexão externa via ssh, ele usa a porta 22 por padrão.

Tentei o seguinte, mas não funcionou:

scp -P 2222 remote1:~/testSCP [email protected]:~/ 

Também tentei o seguinte, que também não funcionou:

scp remote1:~/testSCP -P 2222 [email protected]:~/ 

Para ambos, obtive o seguinte erro:

ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection 

O que é verdade, pois 10.0.1.10 está usando a porta 2222 e não a porta 22.

Como posso especificar remote1 para usar a porta 2222 ao tentar enviar arquivos para (remote2) de remote1?

Atualizar

Depois de tentar

 scp -3 remote1:~/testSCP [email protected]:~/ 

Tenho um comportamento estranho. Mesmo que minha senha esteja correta, ela está me dando o seguinte resultado:

[email protected]"s password: [email protected]"s password: Permission denied, please try again. [email protected]"s password: Permission denied, please try again. [email protected]"s password: 

Ainda não habilitei a autenticação sem chave.

Nova atualização

Depois de tentar de várias maneiras, fui capaz de fazer isso em meus scripts, logando no remote1 via ssh do meu localhost e depois scp do remote1 para o remote2. No entanto, isso não responde à minha pergunta. Eu pretendia fazer isso diretamente da minha máquina local e, em seguida, transferir arquivos entre duas instâncias, o que eu acho que não é suportado se duas instâncias “daemons ssh estão usando uma porta diferente do padrão para a conexão ssh.

Comentários

  • stackoverflow.com/questions/10341032/… pode ajudá-lo
  • Eu tentei como mencionei na minha pergunta. Não parece funcionar para mim
  • localhost ouvindo a porta 22, mas na configuração de ssh é especificado para remote1 e remote2 para a porta 2222. Sim, eu quis dizer ~/.ssh/config Em remote 1 e remote, a porta padrão em ~ / .ssh / config permanece inalterada, então sua porta padrão 22. Posso editá-las, mas gostaria de fazer isso usando uma linha, em vez de editar todas as configurações de ssh todas as vezes.
  • Ok. Eu ' d sugiro editar sua pergunta, adicionando que você pode, mas não ' não está disposto a, editar seu arquivos. Então, você pode ssh em um para os hosts remotos e emitir um scp simples de lá, ou fazê-lo em uma linha com algo como ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. Além disso, você não ' terá que editar config arquivos a qualquer momento: apenas uma vez para cada par de hosts (por exemplo, configurando a porta para conectando-se a remote2 em remote1), mas é claro que você pode se sentir desconfortável com isso, dependendo do número de hosts que você tem.
  • Sim, isso responde à sua pergunta. " Não " é uma resposta e é a resposta, não importa se você gosta ou não.

Resposta

Você não pode fazer isso com um simples scp remoto para remoto [1].

Em vez disso, execute ssh para o primeiro host remoto e execute scp com um argumento de porta a partir daí:

ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2 

Se você quiser fazer exatamente o que scp está fazendo, também pode adicionar as -n -x -oClearAllForwardings=yes opções a ssh, embora isso “geralmente não seja necessário.


[1]: versões mais recentes de scp suportam uma especificação de uri (incluindo uma porta) em vez de host:path, mas apenas ao usar a opção -3 (“passar pelo host local”).

Então, você provavelmente poderia usar

scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2 

(observe que / após host[:port] não faz parte do caminho – se referirá a ./file no user” diretório inicial).

Mas copiar através do localhost é mais lento e, na minha experiência, esconde erros. Por exemplo, isso não imprimirá nenhuma mensagem de erro, apesar de não ser capaz de criar nenhum /foo/bar/baz arquivo:

scp -3 localhost:.bashrc localhost:/foo/bar/baz 

Não cheguei a qualquer profundidade nisso – apenas evitei 😉


Se alguém não está convencido de tudo isso, eles podem olhar para o código-fonte :

void toremote(char *targ, int argc, char **argv) { ... } else if (host) { /* standard remote to remote */ if (tport != -1 && tport != SSH_DEFAULT_PORT) { /* This would require the remote support URIs */ fatal("target port not supported with two " "remote hosts without the -3 option"); } 

Observe que a variável tport está apenas definida ao analisar um scp:// uri, e ele simplesmente não existe em versões anteriores a 7.6p1 (outubro de 2017).

Comentários

  • Você poderia explicar o que -x -oClearAllForwardings=yes esta opção está fazendo em sua resposta, por favor? Eu também estava pensando se isso pode ser feito usando rsync em vez disso.
  • -x desativa o encaminhamento X11 e -oClear.. desativa todos os encaminhamentos tcp (caso algum deles tenha sido forçado por ~/.ssh/config ou /etc/ssh/ssh_config)
  • @RakibFiha rsync diz: " A origem e o destino não podem ser remotos ". Talvez haja truques em torno disso, mas essa deve ser uma questão separada.
  • Agora, eu tenho que perceber isso após sua explicação detalhada. (y)

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *