Wie kopiere ich mit SCP zwischen zwei Servern mit Schlüsselauthentifizierung?


16

Ich kann mich über SSH mit Schlüsselauthentifizierung bei SERVER1 und SERVER2 anmelden. Ich kann jedoch keine Dateien zwischen den beiden Servern kopieren. Warum? Wie kann ich zwischen ihnen kopieren? (Die Daten, die ich kopieren muss, sind größer als die Festplatte meines Notebooks.)

Auf meinem Notebook läuft Ubuntu 10.04 LTS und die beiden Server sind AIX 5300-10-02-0943. Meine ~/.ssh/known_hostsDatei auf meinem Notizbuch enthält die öffentlichen Schlüssel für diese beiden Server. Ich benutze, tsocksweil ich einen SSH-Tunnel verwenden muss, um diese beiden Server zu erreichen. Die beiden Server können sich gegenseitig anpingen.

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

Gibt es / dev / tty? Versuchen Sie
Folgendes

Antworten:


10

Dies ist sehr einfach zu beheben. Der Quellserver kennt den Zielserver nicht und kann Sie nicht zur Bestätigung der Identität auffordern, da dort kein Terminal geöffnet ist:

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

Melden Sie sich einfach beim Quellkonto / Server an und versuchen Sie, ssh (oder scp) zum Zielkonto zu senden, akzeptieren Sie den Hostschlüssel und brechen Sie login / scp ab. Sie sollten kopieren können.

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

Wenn nicht, versuchen Sie:

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

Wenn Sie einen SSH-Schlüssel mit Zugriff auf den Zielserver haben und der Quellserver nicht, können Sie durch Hinzufügen -o "ForwardAgent=yes"Ihren SSH-Agenten an den Quellserver weiterleiten, damit er mit Ihrem SSH-Schlüssel eine Verbindung zum Zielserver herstellen kann.


7

Eine kleine Diagnose: daraus

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

Ich vermute, dass dies so funktioniert, wenn sich die Server-zu-Server-Kopie scpanmeldet SERVER1und den scpBefehl ausführt, an den die Datei gesendet werden soll SERVER2. somit muss sich der aufrufer (von SERVER1) authentifizieren. Jetzt schlägt dies fehl, da es nicht interaktiv ist (es gibt keine /dev/tty) und es keine Möglichkeit gibt, nach einer Passphrase zu fragen.

Dies bedeutet, dass das Kopieren des Schlüssels nach SERVER1(ich kann nicht sagen, ob dies in Ihrer Situation möglich ist) wahrscheinlich das Problem beheben könnte (ich denke ...) ( Wenn es keine Passphrase gibt ... was ziemlich schlecht ist )

Bearbeiten Eine Lösung könnte die folgende sein: Verwenden sshfsSie diese Option , um auf scpdie zu sshfssendenden Dateien zuzugreifen, und senden Sie sie über das gemountete Verzeichnis. Dies sollte Ihnen die nötige Interaktivität bringen (wenn die obige Vermutung richtig war) und alle Schlüssel lokal halten.


sshfs ist keine Option.
LanceBaynes

Das Problem ist also, dass SERVER1 nicht mit Schlüsselauthentifizierung zu SERVER2 ssh kann? Gibt es irgendwelche ssh-Client-Parameter, mit denen der Schlüssel auf meinem Notebook verwendet werden kann?
LanceBaynes

2
Keine Ahnung, ich habe Angst. Sie könnten jedoch ssh SERVER1 scp *args-YOU-specifiy*für ein wenig mehr Flexibilität verwenden. Vielleicht könnte ein stdinTrick helfen ... Ich bin mir nicht sicher.
Sr_

1
@ utopiabounds Antwort (using ssh-agent) klingt viel besser als stdinTrickserei.
Sr_

3

Ich habe das ausprobiert und es funktioniert bei mir zwischen zwei Systemen, ein paar Unterschiede:

  • Ich habe einen SSH-Agenten, der mit meinem hinzugefügten SSH-Schlüssel ausgeführt wird ( ssh-add)
  • Ich habe die ssh-Agent-Weiterleitung standardmäßig aktiviert

Versuche Folgendes:

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

"Hostschlüsselüberprüfung fehlgeschlagen."
LanceBaynes

@LanceBaynes Stellen Sie sicher, dass Sie sich von SERVER1 als Root bei SERVER2 angemeldet haben. Vielleicht haben Sie es nicht in der bekannten Hosts-Datei von root auf SERVER1?
utopiabound

1

-3Wenn Sie die Option scp verwenden möchten , wird der Datenverkehr über Ihr Notebook geleitet.

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


0

Probieren Sie diese Optionen für ssh aus:

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

In meinem Fall versuche ich, in PostgreSQL von SP aus eine Verbindung mit ssh herzustellen. Erster Versuch fehlgeschlagen:

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.

Die Quelle des Problems: kann nicht in know_host schreiben

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

Nächste Verbindungsausgabe:

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

Erfolg !!!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.