Bagaimana cara menyalin dengan SCP antara dua server menggunakan kunci auth?

16

Saya bisa masuk melalui SSH menggunakan otentikasi kunci ke SERVER1 dan SERVER2. Namun, saya tidak dapat menyalin file di antara kedua server. Mengapa? Bagaimana saya bisa menyalin di antara mereka? (data yang harus saya salin lebih besar dari HDD notebook saya)

Notebook saya menjalankan Ubuntu 10,04 LTS dan kedua servernya adalah AIX 5300-10-02-0943. Saya ~/.ssh/known_hostsfile di notebook saya berisi kunci publik untuk kedua server ini. Saya menggunakan tsockskarena saya harus menggunakan terowongan SSH untuk mencapai dua server ini. Dua server dapat saling ping.

[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
sumber
apakah / dev / tty ada? coba ini: ben.goodacre.name/tech/Can't_open_/dev/…
vj-

Jawaban:

10

Ini sangat mudah diperbaiki. Lihat, server sumber tidak tahu server tujuan dan tidak dapat meminta Anda untuk mengkonfirmasi identitas, karena Anda tidak memiliki terminal terbuka di sana:

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

Jadi cukup login ke akun sumber / server dan coba ssh (atau scp) ke akun dest, terima kunci host dan batalkan login / scp. Anda harus dapat menyalin.

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

Jika tidak, coba:

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

Jika Anda memiliki kunci SSH dengan akses ke server tujuan dan server sumber tidak, menambahkan -o "ForwardAgent=yes"akan memungkinkan Anda untuk meneruskan agen SSH Anda ke server sumber sehingga dapat menggunakan kunci SSH Anda untuk terhubung ke server tujuan.

alecco
sumber
7

Sedikit diagnosis: dari sini

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

Saya menduga (tebak) ia bekerja dengan cara ini, salinan server-ke-server dengan scplog ke SERVER1dan mengeksekusi scpperintah untuk mengirim file ke SERVER2; jadi penelepon (dari SERVER1) harus mengotentikasi dirinya sendiri. Sekarang ini gagal karena ini tidak interaktif (tidak ada /dev/tty) dan tidak ada cara untuk meminta kata sandi.

Ini berarti menyalin kunci untuk SERVER1(Saya tidak tahu apakah ini mungkin dalam situasi Anda) mungkin dapat memperbaiki masalah (Saya pikir ...) ( Jika tidak ada frasa sandi ... yang agak buruk )

Sunting Solusi dapat berupa yang berikut, gunakan sshfsuntuk mengakses file yang ingin Anda kirim, kirim melalui scpdari sshfsdirektori -mount. Ini akan membuat Anda mendapatkan interaktivitas yang diperlukan (jika tebakan di atas benar) dan menjaga semua kunci tetap lokal.

sr_
sumber
sshfs bukan opsi.
LanceBaynes
Jadi masalahnya adalah bahwa SERVER1 tidak dapat ssh ke SERVER2 dengan kunci auth? Apakah ada parameter klien ssh untuk ini menggunakan kunci pada notebook saya?
LanceBaynes
2
Tidak tahu, saya takut. Namun, Anda bisa menggunakan ssh SERVER1 scp *args-YOU-specifiy*sedikit lebih banyak fleksibilitas. Mungkin beberapa stdintipu daya bisa membantu ... Saya tidak yakin.
sr_
2
Jawaban @ utopiabound (menggunakan ssh-agent) terdengar jauh lebih baik daripada stdintipu daya.
sr_
3

Saya sudah mencoba ini dan itu berfungsi untuk saya antara dua sistem, beberapa perbedaan:

  • Saya memiliki agen SSH yang berjalan dengan kunci SSH saya yang ditambahkan ( ssh-add)
  • Saya memiliki penerusan ssh-agent diaktifkan secara default

Coba yang berikut ini:

ssh-add
scp -v -o "ForwardAgent=yes" -p -r root@SERVER1:/PATH/TO/DIR root@SERVER2:/PATH/TO/DIR  
utopiabound
sumber
masih "Verifikasi kunci host gagal."
LanceBaynes
@LanceBaynes Pastikan Anda telah masuk ke SERVER2 dari SERVER1 sebagai root. Mungkin Anda tidak memilikinya di file host root yang dikenal di SERVER1?
utopiabound
1

Anda mungkin ingin menggunakan -3opsi scp, ini mengarahkan lalu lintas melalui notebook Anda.

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

törzsmókus
sumber
0

Coba opsi ini untuk ssh:

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

Dalam kasus saya, saya mencoba terhubung dengan ssh dari dalam SP di postgreSQL. Upaya pertama gagal:

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.

Sumber masalah: tidak bisa menulis di 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

Output koneksi berikutnya:

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

sukses !!!

GHReyes
sumber