Anahtar kimlik doğrulamasını kullanarak iki sunucu arasında SCP ile nasıl kopyalanır?


16

SERVER1 ve SERVER2 anahtar kimlik doğrulamasını kullanarak SSH üzerinden oturum açabilirim. Ancak, iki sunucu arasında dosya kopyalayamıyorum. Neden? Aralarında nasıl kopyalayabilirim? (kopyalamam gereken veriler dizüstü bilgisayarımın HDD'sinden daha büyük)

Dizüstü bilgisayarım Ubuntu 10.04 LTS çalıştırıyor ve iki sunucu AIX 5300-10-02-0943. Not ~/.ssh/known_hostsdefterimdeki dosyamda bu iki sunucunun ortak anahtarları var. Kullandığım tsocksbu iki sunucu ulaşmak için SSH tüneli kullanmak zorunda çünkü. İki sunucu birbirine ping atabilir.

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

/ dev / tty var mı? şunu deneyin: ben.goodacre.name/tech/Can't_open_/dev/…
vj-

Yanıtlar:


10

Bunu düzeltmek çok kolaydır. Bakın, kaynak sunucu hedef sunucuyu bilmiyor ve orada açık bir terminaliniz olmadığı için sizden kimliğinizi onaylamanızı isteyemiyor:

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

Bu yüzden sadece kaynak hesaba / sunucuya giriş yapın ve dest hesabına ssh (veya scp) deneyin, ana bilgisayar anahtarını kabul edin ve login / scp'yi iptal edin. Kopyalayabilmelisiniz.

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

Değilse, deneyin:

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

Hedef sunucuya erişimi olan bir SSH anahtarınız varsa ve kaynak sunucu girmiyorsa, ekleme -o "ForwardAgent=yes"işlemi, SSH ajanınızı hedef sunucuya bağlanmak için SSH anahtarınızı kullanabilmesi için kaynak sunucuya yönlendirmenize olanak tanır.


7

Küçük bir teşhis: bundan

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

Bu şekilde çalıştığından şüphelenirim (sanırım), sunucudan sunucuya scpgünlükleri içeren kopyalar ve dosyayı göndermek için komutu SERVER1yürütür ; böylece arayan ( kimlik) kendisini doğrulamalıdır. Etkileşimli olmayan (yok ) ve parola istemenin bir yolu olmadığı için şimdi bu başarısız oluyor .scpSERVER2SERVER1/dev/tty

Bu, anahtarı SERVER1(durumunuzda bunun mümkün olup olmadığını söyleyemem) kopyalamanın muhtemelen sorunu düzeltebileceği anlamına gelir (sanırım ...) ( Parola yoksa ... oldukça kötüdür )

Düzenle Bir çözüm aşağıdaki olabilir sshfs, göndermek istediğiniz dosyalara erişmek için kullanın scp, sshfs-mounted dizininden gönderin . Bu, gerekli etkileşimi (yukarıdaki tahmin doğru ise) almalı ve tüm anahtarları yerel tutmalıdır.


sshfs bir seçenek değildir.
LanceBaynes

Sorun şu ki, SERVER1 anahtar yetkisiyle SERVER2'ye ssh yapamıyor? Bunun dizüstü bilgisayarımda anahtarı kullanması için herhangi bir ssh istemci parametresi var mı?
LanceBaynes

2
Fikrim yok, korkuyorum. Bununla birlikte, ssh SERVER1 scp *args-YOU-specifiy*biraz daha esneklik için kullanabilirsiniz . Belki bazı stdinhileler yardımcı olabilir ... Emin değilim.
sr_

2
@ utopiabound'un cevabı (kullanma ssh-agent) kulağa daha iyi geliyor stdin.
sr_

3

Bunu denedim ve iki sistem arasında benim için çalışıyor, birkaç fark:

  • SSH anahtarım eklenmiş olarak çalışan bir SSH aracım var ( ssh-add)
  • Varsayılan olarak ssh-agent yönlendirme etkin

Takip etmeyi dene:

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

yine de "Ana makine anahtarı doğrulaması başarısız oldu."
LanceBaynes

@LanceBaynes SERVER1'den SERVER2'ye root olarak giriş yaptığınızdan emin olun. Belki de SERVER1'deki root'un bilinen hosts dosyasında yok?
ütopiabound

1

-3scp seçeneğini kullanmak isteyebilirsiniz , trafiği dizüstü bilgisayarınızdan yönlendirir.

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


0

Ssh için bu seçenekleri deneyin:

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

Benim durumumda, ben postgreSQL SP içinden ssh ile bağlanmaya çalışıyorum. İlk deneme başarısız oldu:

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.

Sorunun kaynağı: know_host ile yazılamıyor

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

Sonraki bağlantı çıkışı:

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

başarı !!!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.