Come copiare con SCP tra due server usando la chiave auth?


16

Posso accedere tramite SSH usando l'autenticazione con chiave su SERVER1 e SERVER2. Tuttavia, non riesco a copiare i file tra i due server. Perché? Come posso copiare tra loro? (i dati che devo copiare sono più grandi del mio notebook HDD)

Il mio notebook esegue Ubuntu 10.04 LTS ei due server sono AIX 5300-10-02-0943. Il mio ~/.ssh/known_hostsfile sul mio taccuino contiene le chiavi pubbliche per questi due server. Uso tsocksperché devo utilizzare un tunnel SSH per raggiungere questi due server. I due server possono eseguire il ping l'un l'altro.

[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 no-more-sessions@openssh.com
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 ~] 

esiste / dev / tty? prova questo: ben.goodacre.name/tech/Can't_open_/dev/…
vj-

Risposte:


10

Questo è molto facile da risolvere. Vedi, il server di origine non conosce il server di destinazione e non può chiederti di confermare l'identità, dal momento che non hai un terminale aperto lì:

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

Quindi basta accedere all'account / server di origine e provare a ssh (o scp) all'account dest, accettare la chiave host e annullare l'accesso / scp. Dovresti essere in grado di copiare.

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

In caso contrario, prova:

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

Se si dispone di una chiave SSH con accesso al server di destinazione e il server di origine no, l'aggiunta -o "ForwardAgent=yes"consentirà di inoltrare l'agente SSH al server di origine in modo che possa utilizzare la chiave SSH per connettersi al server di destinazione.


7

Una piccola diagnosi: da questo

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

Sospetto (suppongo) che funzioni in questo modo, la copia da server a server con scplog in SERVER1ed esegue il scpcomando a cui inviare il file SERVER2; quindi il chiamante (da SERVER1) deve autenticarsi. Ora questo fallisce poiché non è interattivo (non c'è /dev/tty) e non c'è modo di chiedere una passphrase.

Questo significa che copiare la chiave in SERVER1(non so se questo è possibile nella tua situazione) potrebbe probabilmente risolvere il problema (penso ...) ( Se non c'è una passphrase ... che è piuttosto male )

Modifica Una soluzione potrebbe essere la seguente, utilizzare sshfsper accedere ai file che si desidera inviare, inviarli scpdalla sshfsdirectory montata. Questo dovrebbe darti l'interattività necessaria (se la supposizione sopra era giusta) e mantenere tutte le chiavi locali.


sshfs non è un'opzione.
LanceBaynes,

Quindi il problema è che SERVER1 non può ssh su SERVER2 con chiave auth? Ci sono dei parametri client ssh per utilizzare la chiave sul mio notebook?
LanceBaynes

2
Non ne ho idea, temo. Tuttavia, potresti usare ssh SERVER1 scp *args-YOU-specifiy*un po 'più di flessibilità. Forse qualche stdintrucco potrebbe aiutare ... Non ne sono sicuro.
sr_

2
La risposta di @ utopiabound (usando ssh-agent) suona molto meglio stdindell'inganno.
sr_

3

Ho provato questo e funziona per me tra due sistemi, alcune differenze:

  • Ho un agente SSH in esecuzione con la mia chiave SSH aggiunta ( ssh-add)
  • Ho l'inoltro di ssh-agent abilitato di default

Prova quanto segue:

ssh-add
scp -v -o "ForwardAgent=yes" -p -r root@SERVER1:/PATH/TO/DIR root@SERVER2:/PATH/TO/DIR  

ancora "Verifica chiave host non riuscita."
LanceBaynes,

@LanceBaynes Assicurarsi di aver effettuato l'accesso a SERVER2 da SERVER1 come root. Forse non lo hai nel file hosts noto di root su SERVER1?
utopiabound

1

potresti voler usare l' -3opzione di scp, dirige il traffico attraverso il tuo notebook.

vale a dire [USER@NOTEBOOK ~] scp -3 root@SERVER1:/PATH/TO/DIR root@SERVER2:/PATH/TO/DIR


0

Prova queste opzioni per ssh:

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

Nel mio caso, sto provando a connettermi con ssh dall'interno di SP in postgreSQL. Primo tentativo fallito:

pc_ubuntu_db=# SELECT command('ssh -q -v admin@10.30.134.26 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.

La fonte del problema: impossibile scrivere in know_host

pc_ubuntu_db=# SELECT command('ssh -v -o StrictHostKeyChecking=no -i admin@10.30.134.26 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

Uscita di connessione successiva:

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

successo !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.