SCP com duas portas diferentes

15

Como posso usar o comando scp para copiar arquivos entre dois servidores remotos do meu PC local?

servidor remoto 1: IP = 67.12.21.133 & port = 6774

servidor remoto 2: IP = 67.129.242.40 & port = 6774

scp -rp -P 6774 [email protected]: /home/denny/testapp1.txt [email protected]:

Ele comete um erro após fornecer a senha 67.12.21.133,

ssh: conecte ao host 67.129.242.40 porta 22: conexão recusada

conexão perdida

linuxspider
fonte
Acabei de testar isso também, mas só funciona para o primeiro host. O segundo está bloqueado para a porta 22.
gajdipajti

Respostas:

19

Você pode usar ~/.ssh/configpara especificar as portas a serem usadas para os hosts (e para definir muitas outras coisas interessantes; consulte a página do manual man ssh_config):

# ~/.ssh/config

Host 67.12.21.133
  Port 6774

Host 67.129.242.40
  Port 6774

Ao fazer isso, você deve usar a opção -3scp, que copia os arquivos na sua máquina local. Caso contrário, o scp emitirá o comando scp via ssh no primeiro host, portanto, ele realmente será executado

 ssh -p 6774 [email protected] scp -rp /home/denny/testapp1.txt [email protected]:

e então o ~ / .ssh / config do primeiro host remoto (67.12.21.133) é usado no lugar do host local.

Quando você configurou o seu ~/.ssh/configcorretamente, isso deve funcionar:

scp -rp3 [email protected]:/home/denny/testapp1.txt [email protected]:

Obviamente, você também pode copiar o conteúdo do arquivo ~ / .ssh / config no seu primeiro host remoto e, em seguida, usar o scp sem a -3opção, o que provavelmente acelerará a transferência.

Ou você pode usar o truque que o scp usa e usar essa linha de comando:

ssh -p 6774 [email protected] scp -rp -P 6774 /home/denny/testapp1.txt [email protected]:

(Observe o caso diferente do parâmetro port para ssh e scp: ssh -p 6774vs. scp -P 6774)

PS: Eu obtive essas informações no bugzilla do OpenSSH, onde as inseri como um bug: https://bugzilla.mindrot.org/show_bug.cgi?id=2020

daniel kullmann
fonte
'-3' não parece ser uma opção válida - eu apenas recebo "scp: opção ilegal - 3".
Ricos Sedman
8

Não encontrei uma solução fácil, mas você pode tentar usar o sshfs da seguinte maneira:

mkdir /tmp/h1
mkdir /tmp/h2

sshfs -p 6774 user1@host1:/public /tmp/h1
sshfs -p 2211 user2@host2:/data/src /tmp/h2

cp /tmp/h1/files.* /tmp/h2

fusermount -u /tmp/h1
fusermount -u /tmp/h2

Outra maneira poderia ser usar o ssh (na verdade não foi testado com êxito):

ssh user1@host1 "cat /public/file.bin" | ssh user2@host2 "cat >/data/file.bin"

Atualmente, não encontrei o caminho certo para inserir as duas senhas. Ele solicita algumas vezes as duas senhas, mas não aceita ninguém. Talvez se você trocar as chaves ssh entre os hosts, isso funcione. Porque você não precisa das senhas.

Eu espero que isso ajude? Thomas

tpf
fonte
6

De acordo com esta página no blog da Linux Academy, você também precisa usar a -P 6774opção antes do segundo caminho remoto:

scp -rp -P 6774 [email protected]:/home/denny/testapp1.txt -P 6774 [email protected]:

Cada uso do -Psinalizador se aplica somente ao próximo local na linha de comando, não ao comando inteiro. Qualquer local que não tenha um -Pentre ele e o caminho anterior (ou o nome do comando [ scp]) é padronizado para a porta padrão (22).

Dan Hunsaker
fonte
Isso não funciona para mim. É uma pena, porque esta parece a melhor solução. O link está quebrado.
David.perez
11
Acabei de atualizar o link (embora eu tenha esquecido de fazer login primeiro ...). A Linux Academy decidiu reestruturar seu site. Espero que ajude, alguns!
Dan Hunsaker
Se apenas isso funcionasse. Mas eu entendo -P: No such file or directory.
Tom
@ Tom - Em que sistema você está executando isso? Você pode ter uma implementação diferente da scpmencionada aqui.
Dan Hunsaker
Este é o Ubuntu 17.04.
Tom
-2

Se você precisar transferir dados de um servidor para outro, use o comando SCP. Para fazer isso

Basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, execute o comando abaixo.

scp -pr [email protected]:/path/to/files /destination/path

Nota: O parâmetro -P pode ser usado se você quiser mencionar o número da porta.

Mitch
fonte
2
você não leu a pergunta. Ele tem um problema com os portos. você pode definir a primeira porta, mas a porca o segundo com o parâmetro -P
gajdipajti
@gajdipajti Não especifiquei uma porta na minha resposta e a adicionei como uma nota. O usuário também afirmou que está usando a mesma porta. Veja as Q. 2ª e 3ª linhas :)
Mitch
2
Mas não funciona dessa maneira, você definirá o primeiro com -P, mas o segundo permanecerá 22. Apenas tente. Estou fazendo os testes no momento, mas ainda não há soluções em funcionamento.
21712
Você só usaria a opção -P se estiver usando uma porta não padrão.
Mitch