Jak kopiować za pomocą SCP między dwoma serwerami za pomocą autoryzacji klucza?

16

Mogę zalogować się przez SSH przy użyciu uwierzytelniania klucza na SERWER1 i SERWER2. Nie mogę jednak kopiować plików między dwoma serwerami. Dlaczego? Jak mogę kopiować między nimi? (dane, które muszę skopiować, są większe niż dyski twarde moich notebooków)

Mój notebook działa pod kontrolą Ubuntu 10.04 LTS, a dwa serwery to AIX 5300-10-02-0943. Mój ~/.ssh/known_hostsplik na moim notebooku zawiera klucze publiczne dla tych dwóch serwerów. Używam, tsocksponieważ muszę korzystać z tunelu SSH, aby dotrzeć do tych dwóch serwerów. Dwa serwery mogą pingować się nawzajem.

[USER@NOTEBOOK ~] tsocks scp -v -i /home/USER/.ssh/id_rsa -p -r root@SERVER1:/PATH/TO/DIR root@SERVER2:/PATH/TO/DIR
Executing: /usr/bin/ssh '-v' '-x' '-oClearAllForwardings yes' '-n' '-l' 'root' 'SERVER1' 'scp -v -r -p' '/PATH/TO/DIR' 'root@SERVER2:/PATH/TO/DIR'
OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 Mar 2009
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to SERVER1 [SERVER1] port 22.
debug1: Connection established.
debug1: identity file /home/USER/.ssh/identity type -1
debug1: identity file /home/USER/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-1024
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-1024
debug1: identity file /home/USER/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.2p1+sas
debug1: match: OpenSSH_5.2p1+sas pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'SERVER1' is known and matches the RSA host key.
debug1: Found key in /home/USER/.ssh/known_hosts:59
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/USER/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 151
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.utf8
debug1: Sending command: scp -v -r -p /PATH/TO/DIR root@SERVER2:/PATH/TO/DIR
Executing: program /applications/ssh/5.20.15.0/bin/ssh host SERVER2, user root, command scp -v -r -p -t /PATH/TO/DIR
OpenSSH_5.2p1+sas, OpenSSL 0.9.8k 25 Mar 2009
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to SERVER2 [SERVER2] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/identity type -1
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.2p1+sas
debug1: match: OpenSSH_5.2p1+sas pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: read_passphrase: can't open /dev/tty: No such device or address
Host key verification failed.
lost connection
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 1984, received 3848 bytes, in 0.3 seconds
Bytes per second: sent 6903.4, received 13389.2
debug1: Exit status 1


[USER@NOTEBOOK ~] tsocks scp -i /home/USER/.ssh/id_rsa -p -r root@SERVER1:/PATH/TO/DIR root@SERVER2:/PATH/TO/DIR
Host key verification failed.
lost connection
[USER@NOTEBOOK ~] 
LanceBaynes
źródło
czy istnieje / dev / tty? spróbuj tego: ben.goodacre.name/tech/Can't_open_/dev/…
vj-

Odpowiedzi:

10

Jest to bardzo łatwe do naprawienia. Serwer źródłowy nie zna serwera docelowego i nie może prosić o potwierdzenie tożsamości, ponieważ nie ma tam otwartego terminalu:

debug1: read_passphrase: can't open /dev/tty: No such device or address
Host key verification failed.
lost connection

Zaloguj się do konta źródłowego / serwera i spróbuj ssh (lub scp) do konta docelowego, zaakceptuj klucz hosta i anuluj logowanie / scp. Powinieneś być w stanie skopiować.

local $ ssh source@src-server
src-server $ ssh dest@dst-server
The authenticity of host 'destination (10.0.0.x)' can't be established.
RSA key fingerprint is 71:ec:c0:86:7f:b6:51:eb:76:c8:1f:2f:ba:0a:f4:20.
Are you sure you want to continue connecting (yes/no)? yes
dest@dst-server's password: ^C
src-server $ exit

local $ scp -r source@src-server:/path/to/files dest@dst-server:/path/to/files

Jeśli nie, spróbuj:

local $ scp -r -o "ForwardAgent=yes" source@src-server:/path/to/files dest@dst-server:/path/to/files

Jeśli masz klucz SSH z dostępem do serwera docelowego, a serwer źródłowy go nie ma, dodanie -o "ForwardAgent=yes"pozwoli Ci przesłać agenta SSH do serwera źródłowego, aby mógł użyć Twojego klucza SSH do połączenia z serwerem docelowym.

alecco
źródło
7

Mała diagnoza: z tego

debug1: Sending command: scp -v -r -p /PATH/TO/DIR root@SERVER2:/PATH/TO/DIR
[...]
debug1: read_passphrase: can't open /dev/tty: No such device or address

Podejrzewam (zgaduję), że działa w ten sposób, kopia serwer-serwer z scplogami do SERVER1i wykonuje scppolecenie wysłania pliku SERVER2; dlatego osoba dzwoniąca (z SERVER1) musi się uwierzytelnić. Teraz to się nie udaje, ponieważ jest nieinteraktywne (nie ma /dev/tty) i nie ma sposobu, aby poprosić o hasło.

Oznacza to, że skopiowanie klucza do SERVER1(nie wiem, czy jest to możliwe w twojej sytuacji) może prawdopodobnie rozwiązać problem (myślę ...) ( Jeśli nie ma hasła ... co jest raczej złe )

Edycja Rozwiązanie może wyglądać następująco: użyj, sshfsaby uzyskać dostęp do plików, które chcesz wysłać, wysłać je scpz sshfskatalogu -mounted. Powinno to zapewnić niezbędną interaktywność (jeśli powyższe przypuszczenie było słuszne) i zachować wszystkie klucze lokalne.

sr_
źródło
sshfs nie jest opcją.
LanceBaynes
Problem polega na tym, że SERVER1 nie może ssh do SERVER2 przy użyciu klucza autoryzacji? Czy są jakieś parametry klienta ssh, aby użyć klucza w moim notebooku?
LanceBaynes
2
Nie mam pojęcia, obawiam się. Możesz jednak użyć ssh SERVER1 scp *args-YOU-specifiy*dla nieco większej elastyczności. Może jakieś stdinpodstępy mogłyby pomóc ... Nie jestem pewien.
sr_
2
Odpowiedź @ utopiabound (użycie ssh-agent) brzmi o wiele lepiej niż stdinoszustwo.
sr_
3

Próbowałem tego i działa dla mnie między dwoma systemami, kilka różnic:

  • Mam agenta SSH działającego z dodanym moim kluczem SSH ( ssh-add)
  • Mam domyślnie włączone przekazywanie agentów ssh

Spróbuj wykonać następujące czynności:

ssh-add
scp -v -o "ForwardAgent=yes" -p -r root@SERVER1:/PATH/TO/DIR root@SERVER2:/PATH/TO/DIR  
utopiabound
źródło
nadal „Weryfikacja klucza hosta nie powiodła się”.
LanceBaynes
@LanceBaynes Upewnij się, że zalogowałeś się do SERVER2 z SERVER1 jako root. Może nie masz go w znanym pliku root hosta na SERVER1?
utopiabound
1

możesz użyć -3opcji scp, która kieruje ruchem przez twój notebook.

to znaczy [USER@NOTEBOOK ~] scp -3 root@SERVER1:/PATH/TO/DIR root@SERVER2:/PATH/TO/DIR

törzsmókus
źródło
0

Wypróbuj następujące opcje dla ssh:

-o StrictHostKeyChecking=no
-o UserKnownHostsFile=.ssh/known_hosts [OPTIONAL]

W moim przypadku próbuję połączyć się z ssh z poziomu SP w postgreSQL. Pierwsza próba nie powiodła się:

pc_ubuntu_db=# SELECT command('ssh -q -v [email protected] hostname');
debug1: Server host key: RSA 0a:28:83:72:d7:7d:89:93:96:a1:1b:e2:f9:22:85:62 
debug1: read_passphrase: can't open /dev/tty: No such device or address
        Host key verification failed.

Źródło problemu: nie można pisać w know_host

pc_ubuntu_db=# SELECT command('ssh -v -o StrictHostKeyChecking=no -i [email protected] hostname');
debug1: Server host key: RSA 0a:28:83:72:d7:7d:89:93:96:a1:1b:e2:f9:22:85:62
Warning: Permanently added '10.30.134.26' (RSA) to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
...
Transferred: sent 2672, received 2040 bytes, in 0.0 seconds
Bytes per second: sent 214358.6, received 163657.0
debug1: Exit status 0

Następne wyjście połączenia:

debug1: Server host key: RSA 0a:28:83:72:d7:7d:89:93:96:a1:1b:e2:f9:22:85:62
debug1: Host '10.30.134.26' is known and matches the RSA host key.
debug1: Found key in /var/lib/postgresql/.ssh/known_hosts:3
debug1: ssh_rsa_verify: signature correct

sukces !!!

GHReyes
źródło