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 denny@67.12.21.133: /home/denny/testapp1.txt denny@67.129.242.40:

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


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 denny@67.12.21.133 scp -rp /home/denny/testapp1.txt denny@67.129.242.40:

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 denny@67.12.21.133:/home/denny/testapp1.txt denny@67.129.242.40:

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 denny@67.12.21.133 scp -rp -P 6774 /home/denny/testapp1.txt denny@67.129.242.40:

(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


'-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


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 denny@67.12.21.133:/home/denny/testapp1.txt -P 6774 denny@67.129.242.40:

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).


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 root@192.168.1.2:/path/to/files /destination/path

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.