¿Cómo copiar con SCP entre dos servidores usando la autenticación de clave?


16

Puedo iniciar sesión a través de SSH usando la autenticación de clave para SERVER1 y SERVER2. Sin embargo, no puedo copiar archivos entre los dos servidores. ¿Por qué? ¿Cómo puedo copiar entre ellos? (los datos que tengo que copiar son más grandes que los discos duros de mis portátiles)

Mi computadora portátil ejecuta Ubuntu 10.04 LTS y los dos servidores son AIX 5300-10-02-0943. Mi ~/.ssh/known_hostsarchivo en mi cuaderno contiene las claves públicas para estos dos servidores. Lo uso tsocksporque tengo que usar un túnel SSH para llegar a estos dos servidores. Los dos servidores pueden hacer ping entre sí.

[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 ~] 

¿existe / dev / tty? intente esto: ben.goodacre.name/tech/Can't_open_/dev/…
vj-

Respuestas:


10

Esto es muy fácil de arreglar. Vea, el servidor de origen no conoce el servidor de destino y no puede pedirle que confirme la identidad, ya que no tiene una terminal abierta allí:

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

Tan solo inicie sesión en la cuenta / servidor de origen e intente ssh (o scp) en la cuenta de destino, acepte la clave de host y cancele el inicio de sesión / scp. Deberías poder copiar.

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

Si no, intente:

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

Si tiene una clave SSH con acceso al servidor de destino y el servidor de origen no, la adición -o "ForwardAgent=yes"le permitirá reenviar su agente SSH al servidor de origen para que pueda usar su clave SSH para conectarse al servidor de destino.


7

Un pequeño diagnóstico: de esto

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

Sospecho (supongo) que funciona de esta manera, la copia de servidor a servidor con scpregistros SERVER1y ejecuta el scpcomando para enviar el archivo SERVER2; así, la persona que llama (desde SERVER1) tiene que autenticarse a sí misma. Ahora esto falla ya que no es interactivo (no hay /dev/tty) y no hay forma de pedir una frase de contraseña.

Esto significa que copiar la clave en SERVER1(no puedo decir si esto es posible en su situación) probablemente podría solucionar el problema (creo ...) ( Si no hay una frase de contraseña ... lo cual es bastante malo )

Editar Una solución podría ser la siguiente, usar sshfspara acceder a los archivos que desea enviar, enviarlos scpdesde el sshfsdirectorio montado. Esto debería proporcionarle la interactividad necesaria (si la suposición anterior era correcta) y mantener todas las claves locales.


sshfs no es una opción.
LanceBaynes

Entonces, ¿el problema es que SERVER1 no puede hacer ssh a SERVER2 con la autenticación de clave? ¿Hay algún parámetro de cliente ssh para que esto use la clave en mi computadora portátil?
LanceBaynes

2
No tengo idea, me temo. Sin embargo, podría usar ssh SERVER1 scp *args-YOU-specifiy*para un poco más de flexibilidad. Quizás algún stdintruco podría ayudar ... No estoy seguro.
Sr_

2
La respuesta de @ utopiabound (usando ssh-agent) suena mucho mejor que el stdinengaño.
Sr_

3

He intentado esto y me funciona entre dos sistemas, algunas diferencias:

  • Tengo un agente SSH ejecutándose con mi clave SSH agregada ( ssh-add)
  • Tengo el reenvío de agente ssh habilitado de forma predeterminada

Intenta lo siguiente:

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

aún "Error de verificación de clave de host".
LanceBaynes

@LanceBaynes Asegúrese de haber iniciado sesión en SERVER2 desde SERVER1 como root. ¿Quizás no lo tenga en el archivo de hosts conocidos de root en SERVER1?
utopiabound

1

es posible que desee utilizar la -3opción de scp, que dirige el tráfico a través de su computadora portátil.

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


0

Pruebe estas opciones para ssh:

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

En mi caso, intento conectarme con ssh desde SP dentro de postgreSQL. Primer intento fallido:

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 fuente del problema: no se puede escribir en 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

Siguiente salida de conexión:

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

éxito !!!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.