RSA 키를 사용하여 비밀번호 없는 SSH를 설정하는 방법

RSA 키를 사용하여 비밀번호 없는 SSH를 설정하는 방법

두 컴퓨터 간에 비밀번호 없는 SSH 구성을 설정하려고 하는데 문제가 발생했습니다. 나는 성공하지 못한 채 많은 방법을 따랐습니다. 내가 취한 단계는 다음과 같습니다.

  1. 클라이언트에서 인증 키를 생성합니다. (비밀번호를 묻는 메시지가 나타나면 Enter 키를 누르세요.) [root@box1:.ssh/$] ssh-keygen -t rsa

  2. 공개 키를 서버에 복사합니다. [root@box1:.ssh/$] scp id_rsa.pub root@box2:.ssh/authorized_keys

  3. 인증키가 서버에 성공적으로 생성되었는지 확인하세요.

  4. 다음 명령을 실행합니다. [root@box1:.ssh/$] ssh root@box2 ls

여전히 비밀번호를 묻는 메시지가 나타납니다. "실행 중인 SSH 버전에 따라..."라는 설명이 포함된 가이드를 읽었습니다(이 기능이 필요한 버전은 지정하지 않지만). 다음이 필요할 수 있습니다.

  • .ssh/authorized_keys2의 공개 키
  • .ssh의 권한은 700입니다.
  • .ssh/authorized_keys2의 권한은 640입니다.

나는 또한 성공하지 못한 채 이 단계를 따랐습니다. 홈, 루트 및 .ssh 디렉토리는 그룹별로 쓸 수 없음을 확인했습니다(다음에 따라).https://unix.stackexchange.com/tags/ssh/info).

내가 무엇을 놓치고 있는지 아는 사람 있나요?

감사해요

편집: 또한 ssh-copy-id 명령을 사용하여 공개 키를 두 번째 상자에 복사하고 파일을 생성했습니다 .ssh/authorized_keys.

[root@box1:.ssh/$] ssh-copy-id -i id_rsa.pub root@box2

EDIT2: 버전 정보 포함

// box1 (시스템 키가 생성됨)

  • 리눅스 2.6.34
  • OpenSSH_5.5p1 Debian-6, OpenSSL 0.9.8o 2010년 6월 1일

// 상자 2

  • 리눅스 2.6.33
  • Dropbear 클라이언트 v0.52

EDIT3: 디버그 출력

[root@box1:.ssh/$] ssh -vvv root@box2 ls
OpenSSH_5.5p1 Debian-6, OpenSSL 0.9.8o 01 Jun 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to box2 [box2] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug3: Not a RSA1 key file /root/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /root/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version dropbear_0.52
debug1: no match: dropbear_0.52
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.5p1 Debian-6
debug2: fd 3 setting O_NONBLOCK
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit:
diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-    
group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit:
[email protected],[email protected],ssh-rsa,ssh-dss
debug2: kex_parse_kexinit:
aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-    
cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysatoe
debug2: kex_parse_kexinit:
aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-    
cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysatoe
debug2: kex_parse_kexinit:
hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,[email protected],hmac-    
sha1-96,hmac-md5-96
debug2: kex_parse_kexinit:
hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,[email protected],hmac-
sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit:
aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-
cbc,twofish128-cbc,blowfish-cbc
debug2: kex_parse_kexinit:
aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-
cbc,twofish128-cbc,blowfish-cbc
debug2: kex_parse_kexinit: hmac-sha1-96,hmac-sha1,hmac-md5
debug2: kex_parse_kexinit: hmac-sha1-96,hmac-sha1,hmac-md5
debug2: kex_parse_kexinit: zlib,[email protected],none
debug2: kex_parse_kexinit: zlib,[email protected],none
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 none
debug2: dh_gen_key: priv key bits set: 132/256
debug2: bits set: 515/1024
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug3: check_host_in_hostfile: host 192.168.20.10 filename
/root/.ssh/known_hosts
debug3: check_host_in_hostfile: host 192.168.20.10 filename
/root/.ssh/known_hosts
debug3: check_host_in_hostfile: match line 3
debug1: Host 'box2' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:3
debug2: bits set: 522/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /root/.ssh/id_rsa (0x54b1c340)
debug2: key: /root/.ssh/id_dsa ((nil))
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred
gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /root/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

EDIT4: 또 다른 흥미로운 발전입니다. box1(OpenSSH 실행)에서 키를 생성하고 이를 box2(dropbear 실행)에 복사하는 대신 반대 작업을 수행합니다.

[root@box2:.ssh/$] dropbearkey -t rsa -f id_rsa [root@box2:.ssh/$] dropbearkey -y -f id_rsa | grep "^ssh-rsa" >> authorized_keys [root@box2:.ssh/$] scp authorized_keys root@box1:.ssh/

이렇게 하면 ID 파일을 지정한 경우에만 box2에서 box1로 암호 없는 명령을 성공적으로 실행할 수 있습니다. [root@box2:.ssh/$] ssh -i id_rsa root@box1 ls

여전히 box1(OpenSSH)에서 box2(dropbear)로 명령을 실행할 수 없습니다.

답변1

문제의 원인을 찾았습니다. 내부에는 /var/log/messages힌트를 준 이상한 소유권에 대한 막연한 메시지가있었습니다 . 그래서 확인해 보니 /root, 및 /root/.ssh의 권한은 /root/.ssh/*모두 정확하지만(700) 소유권은 입니다 default.default. 어떻게 이런 일이 일어났는지는 모르겠지만... 저는 다음과 같이 실행했습니다.

[root@box1:.ssh/$] chown root.root /root
[root@box1:.ssh/$] chown root.root /root/.ssh
[root@box1:.ssh/$] chown root.root /root/.ssh/* 

소유권을 루트로 변경하고 비밀번호 없이 로그인하는 것은 양방향으로 가능합니다.

답변2

SSH를 통한 루트 로그인이 허용되는지 확인할 수 있습니까? keygen은 일반적으로 비밀번호를 묻는 메시지를 표시합니다. 기기 등록 시 비밀번호를 설정하셨나요? 그렇다면 비밀번호를 묻는 메시지가 나타납니다. 헤드리스 계정에 대해 비밀번호 없이 액세스하려면 비밀번호 없는 개인 키를 생성하세요.

답변3

디버깅 결과: 파일 형식이 올바른 것이 아닌 debug2: key_type_from_name: unknown key type '-----BEGIN'것 같습니다 . 첫 번째 줄(두 줄?), 마지막 줄(----End) 및 기타 줄 바꿈을 제거하면 문제가 해결됩니다.authorized_keys

Linux용 키 파일은 많은 Windows(및 일부 Linux) 생성기와 동일한 키 파일을 사용하지 않습니다. 예를 들어 PuTTY는 개인 키로 시작 ---- BEGIN SSH2 PUBLIC KEY ----하지만 Linux는 개인 키를 찾고 있습니다. ssh-rsa AAAAB3NzaC1yc2E...G8HAaGz8ob6IXx3841ASs= Example@server 전체 사양은 다음에서 찾을 수 있습니다.http://man.he.net/man5/authorized_keys

그러나 짧은 버전은 다음과 같습니다. * 개행 없음
* 프로토콜(ssh-rsa, ssh-dsa)로 시작
* 공개 키
* "=" 및 키 이름으로 끝남

이것이 도움이 된다면 알려주세요.

관련 정보