Làm cách nào để sao chép với SCP giữa hai máy chủ bằng khóa auth?


16

Tôi có thể đăng nhập qua SSH bằng cách sử dụng xác thực khóa vào SERVER1 và SERVER2. Tuy nhiên, tôi không thể sao chép các tập tin giữa hai máy chủ. Tại sao? Làm thế nào tôi có thể sao chép giữa chúng? (dữ liệu mà tôi phải sao chép lớn hơn so với máy tính xách tay của tôi)

Máy tính xách tay của tôi chạy Ubuntu 10.04 LTS và hai máy chủ là AIX 5300-10-02-0943. My ~/.ssh/known_hoststập tin trên máy tính xách tay của tôi chứa khóa công khai cho hai máy chủ này. Tôi sử dụng tsocksvì tôi phải sử dụng đường hầm SSH để tiếp cận hai máy chủ này. Hai máy chủ có thể ping nhau.

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

không / dev / tty tồn tại? hãy thử điều này: ben.goodacre.name/tech/Can't_open_/dev/iêu
vj-

Câu trả lời:


10

Điều này rất dễ dàng để sửa chữa. Xem, máy chủ nguồn không biết máy chủ đích và nó không thể yêu cầu bạn xác nhận danh tính, vì bạn không có thiết bị đầu cuối mở ở đó:

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

Vì vậy, chỉ cần đăng nhập vào tài khoản / máy chủ nguồn và thử ssh (hoặc scp) vào tài khoản Dest, chấp nhận khóa máy chủ và hủy đăng nhập / scp. Bạn sẽ có thể sao chép.

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

Nếu không, hãy thử:

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

Nếu bạn có khóa SSH có quyền truy cập vào máy chủ đích và máy chủ nguồn thì không, việc thêm -o "ForwardAgent=yes"sẽ cho phép bạn chuyển tiếp tác nhân SSH của mình đến máy chủ nguồn để nó có thể sử dụng khóa SSH của bạn để kết nối với máy chủ đích.


7

Một chẩn đoán nhỏ: từ đây

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

Tôi nghi ngờ (đoán) nó hoạt động theo cách này, bản sao từ máy chủ đến máy chủ với scpcác bản ghi vào SERVER1và thực thi scplệnh để gửi tệp đến SERVER2; do đó người gọi (từ SERVER1) phải tự xác thực. Bây giờ điều này không thành công vì nó không tương tác (không có /dev/tty) và không có cách nào để yêu cầu một cụm mật khẩu.

Điều này có nghĩa là sao chép khóa vào SERVER1(tôi không thể biết liệu điều này có thể xảy ra trong tình huống của bạn không) có thể khắc phục được sự cố (tôi nghĩ ...) ( Nếu không có cụm mật khẩu ... khá tệ )

Chỉnh sửa Một giải pháp có thể là như sau, sử dụng sshfsđể truy cập các tệp bạn muốn gửi, gửi chúng qua scptừ sshfsthư mục -mounted. Điều này sẽ giúp bạn có được sự tương tác cần thiết (nếu đoán ở trên là đúng) và giữ tất cả các khóa cục bộ.


sshfs không phải là một lựa chọn.
LanceBaynes

Vì vậy, vấn đề là SERVER1 không thể chuyển sang SERVER2 bằng khóa auth? Có bất kỳ tham số máy khách ssh nào cho việc này để sử dụng khóa trên máy tính xách tay của tôi không?
LanceBaynes

2
Không có ý kiến, tôi sợ. Tuy nhiên, bạn có thể sử dụng ssh SERVER1 scp *args-YOU-specifiy*để linh hoạt hơn một chút. Có lẽ một số stdinmánh khóe có thể giúp ... Tôi không chắc.
sr_

1
Câu trả lời (sử dụng ssh-agent) của @ utopiabound nghe có vẻ tốt hơn nhiều so với stdinmánh khóe.
sr_

3

Tôi đã thử điều này và nó hoạt động với tôi giữa hai hệ thống, một vài điểm khác biệt:

  • Tôi có một tác nhân SSH đang chạy với khóa SSH được thêm vào ( ssh-add)
  • Tôi có bật chuyển tiếp ssh-agent theo mặc định

Hãy thử như sau:

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

vẫn "Xác minh khóa máy chủ không thành công."
LanceBaynes

@LanceBaynes Đảm bảo rằng bạn đã đăng nhập vào SERVER2 từ SERVER1 với quyền root. Có lẽ bạn không có nó trong tập tin máy chủ đã biết của root trên SERVER1?
tưởng

1

bạn có thể muốn sử dụng -3tùy chọn scp, nó điều hướng lưu lượng truy cập thông qua sổ ghi chép của bạn.

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


0

Hãy thử các tùy chọn này cho ssh:

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

Trong trường hợp của tôi, tôi đang cố gắng kết nối với ssh từ bên trong SP trong postgreSQL. Attemp đầu tiên thất bại:

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.

Nguồn gốc của vấn đề: không thể viết trong 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

Đầu ra kết nối tiếp theo:

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

sự thành công !!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.