SSH ข้าม pubkey ของฉันและขอรหัสผ่าน


52

ทุกครั้งที่ฉันใช้เซิร์ฟเวอร์ระยะไกลฉันต้องระบุรหัสผ่าน ฉันคัดลอกกุญแจสาธารณะของฉัน (id_dsa.pub) ไปยังเซิร์ฟเวอร์ระยะไกลโดยใช้:

ssh-copy-id -i id_dsa.pub user@server

ฉันตรวจสอบว่ามีการเพิ่มอย่างถูกต้องใน authorized_keys สิทธิ์ของไฟล์ / ไดเรกทอรีทั้งหมดถูกต้อง:

~user 755
~user/.ssh 700
~user/.ssh/authorized_keys 640
~user/.ssh/id_dsa.pub 644

ฟิลด์ PasswordAuthentication ใน / etc / ssh / sshd_config ถูกตั้งค่าเป็นใช่ ฉันใส่ sshd ในโหมดดีบักและเพิ่มสวิตช์ verbose ลงในคำสั่ง ssh ฉันได้รับความประทับใจว่าเซิร์ฟเวอร์ไม่ได้พยายามใช้ id_pub.dsa เนื่องจากบรรทัด

Skipping ssh-dss key: ........... not in PubkeyAcceptedKeyTypes

ไม่มีแผ่นดิสก์ที่เข้ารหัสทางฝั่งเซิร์ฟเวอร์ แนวคิดใดที่จะก้าวหน้า นี่คือข้อมูลการดีบัก ssh daemon:

sudo /usr/sbin/sshd -d
====
debug1: sshd version OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type ECDSA
debug1: private host key: #2 type 3 ECDSA
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
Set /proc/self/oom_score_adj from 0 to -1000
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.
debug1: Bind to port 22 on ::.
Server listening on :: port 22.
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8
debug1: inetd sockets after dupping: 3, 3
Connection from xxx port 63521 on yyy port 22
debug1: Client protocol version 2.0; client software version OpenSSH_7.1
debug1: match: OpenSSH_7.1 pat OpenSSH* compat 0x04000000
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
debug1: permanently_set_uid: 115/65534 [preauth]
debug1: list_hostkey_types: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256 [preauth]
debug1: SSH2_MSG_KEXINIT sent [preauth]
debug1: SSH2_MSG_KEXINIT received [preauth]
debug1: kex: client->server chacha20-poly1305@openssh.com <implicit> none [preauth]
debug1: kex: server->client chacha20-poly1305@openssh.com <implicit> none [preauth]
debug1: expecting SSH2_MSG_KEX_ECDH_INIT [preauth]
debug1: SSH2_MSG_NEWKEYS sent [preauth]
debug1: expecting SSH2_MSG_NEWKEYS [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user damian service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: PAM: initializing for "damian"
debug1: PAM: setting PAM_RHOST to "freebox-server.local"
debug1: PAM: setting PAM_TTY to "ssh"
Connection closed by xxxx [preauth]
debug1: do_cleanup [preauth]
debug1: monitor_read_log: child log fd closed
debug1: do_cleanup

นี่คือเอาต์พุต ssh verbose:

$ ssh -v user@server
OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015
debug1: Connecting to server [xxxx] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type 2
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3 pat OpenSSH_6.6.1* compat 0x04000000
debug1: Authenticating to server:22 as 'user'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client chacha20-poly1305@openssh.com <implicit> none
debug1: kex: client->server chacha20-poly1305@openssh.com <implicit> none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:v4BNHM0Q33Uh6U4VHenA9iJ0wEyi8h0rFVetbcXBKqA
debug1: Host 'server' is known and matches the ECDSA host key.
debug1: Found key in /home/user/.ssh/known_hosts:2
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
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: Trying private key: /home/user/.ssh/id_rsa
debug1: Skipping ssh-dss key /home/user/.ssh/id_dsa for not in PubkeyAcceptedKeyTypes
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug1: Trying private key: /home/user/.ssh/id_ed25519
debug1: Next authentication method: password
user@server's password:

1
ดูsuperuser.com/q/1016989/93541สำหรับปัญหาเดียวกัน (และเป็นวิธีแก้ปัญหาเดียวกัน)
DW

โปรดทราบว่าหาก sshd_config บนปลายทางมีPubkeyAuthentication noคุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านเสมอ ตั้งค่าเป็นใช่และรีสตาร์ท sshd (บนโฮสต์ปลายทาง) เพื่อเปิดใช้งานการรับรองความถูกต้อง pubkey
C. Kelly

คำตอบ:


84

openssh เวอร์ชั่นใหม่ (7.0+) เลิกใช้คีย์ DSAและไม่ได้ใช้คีย์ DSA ตามค่าเริ่มต้น (ไม่ใช่บนเซิร์ฟเวอร์หรือไคลเอนต์) ไม่แนะนำให้ใช้กุญแจอีกต่อไปดังนั้นหากทำได้ฉันแนะนำให้ใช้ปุ่ม RSAหากทำได้

หากคุณต้องการใช้คีย์ DSA จริงๆคุณต้องอนุญาตให้ใช้คีย์เหล่านี้ในการกำหนดค่าไคลเอนต์ของคุณโดยใช้

PubkeyAcceptedKeyTypes +ssh-dss

ควรจะเพียงพอที่จะวางบรรทัด~/.ssh/configนั้นไว้เนื่องจากข้อความ verbose พยายามบอกคุณ


5
+1 แต่ดีกว่าคำแนะนำที่จะใช้อีกไม่เลิกชนิดที่สำคัญ ...
jasonwryan

@jasonwryan ขอบคุณสำหรับความคิดเห็น อย่างแน่นอน ฉันจะอัปเดตคำตอบ
Jakuje

ขอบคุณ Jakuje! นั่นทำให้รู้สึกว่าฉันไม่ได้ตระหนักดีเอสเอเป็นสิ่งที่เก่า ฉันสร้างคู่คีย์ใหม่ssh-keygenrsa เป็นค่าเริ่มต้นแล้ว ฉันจะพยายามเข้าสู่ระบบด้วยสิ่งนี้จากเครื่องอื่นในวันพรุ่งนี้
Damo

หากคุณ~/.ssh/configไม่ได้อยู่เพียงสร้าง และจำไว้ว่าการกำหนดสิทธิ์ corect chmod 600 ~/.ssh/configนี้:
Florian Brucker

@ knb ไม่ทำอย่างนั้น มันจะหลีกเลี่ยงการใช้อัลกอริทึมอื่น ๆ ในอนาคตเนื่องจากคุณลบอัลกอริทึมรูปไข่ทั้งหมด
Jakuje

2

ในกรณีของฉันฉันมีปัญหานี้เพราะผู้ใช้รายอื่นเปลี่ยนAuthorizedKeysFileสถานที่ เนื่องจากไม่มีauthorized_keysผู้ใช้รายอื่นในตำแหน่งนี้การเข้าสู่ระบบจะใช้รหัสผ่านเป็นค่าเริ่มต้นแม้ว่าจะauthorized_keysมีสิทธิ์การใช้งานที่ถูกต้องในโฮมไดเรกทอรีเริ่มต้น

AuthorizedKeysFile   /etc/ssh/%u/authorized_keys

แสดงความคิดเห็นบรรทัดที่แก้ไขนี้แล้วและเริ่มบริการ sshd ใหม่เพื่อกลับไปที่การตั้งค่าเริ่มต้นซึ่งอนุญาตให้ผู้ใช้รายอื่นรับรองความถูกต้องโดยใช้คีย์ของพวกเขา


ฉันเพิ่งแก้ไขปัญหาที่คล้ายกันในระบบ RHEL7 ที่บริบท SELinux ไม่ได้เริ่มต้นอย่างถูกต้องในบ้านของผู้ใช้ดังนั้น ssh จึงไม่สามารถอ่านไฟล์คีย์ที่ได้รับอนุญาตแม้จะมีการอนุญาตมาตรฐาน ในที่สุดฉันก็สิ้นสุดการทำงานrestorecon -Rv /homeเพื่อแก้ไขสำหรับผู้ใช้รายอื่นที่ตั้งค่าไว้อย่างไม่ถูกต้องในระบบเดียวกัน
dannysauer

1

ฉันลองตอบคำถามของจากุจไม่มีโชค แต่ฉันเข้าใจปัญหาจากตรงนั้น พยายามเพิ่มความคิดเห็น แต่ต้องการชื่อเสียงว่าทำไมจึงเพิ่ม anwser

แต่ไฟล์กำหนดค่าสำหรับฉัน / etc / ssh / ssh_config

  1. sudo nano /etc/ssh/ssh_config
  2. PubkeyAcceptedKeyTypes +ssh-dss เพิ่มบรรทัดนี้ที่ด้านล่าง
  3. บันทึกและลองอีกครั้ง

ทำงาน!


1

เพียงเพื่อสรุปสิ่งที่ผมทำเพื่อSSH เพื่อ Pi

ในเครื่องเซิร์ฟเวอร์ (ราสเบอร์รี่ Pi):

$ ip addr show 

หรือเพียงแค่ip aนี้จะแสดงที่อยู่ IP ของเครื่อง Pi - host_ip

$ mkdir .ssh

ในเครื่องไคลเอนต์ (Ubuntu):

$ ssh-keygen -t rsa  

เครดิตของ @Jakuje ด้านบน ตอนแรกฉันใช้ ssh-keygen -t dsa สำหรับการสร้างคีย์และ ssh ก็ขอรหัสผ่านจากฉัน ssh -v ip-address ไม่ได้ให้ข้อมูลที่มีประโยชน์กับฉันเลยจนกระทั่งฉันเห็นคำตอบของ @ Jakuje

$ cat .ssh/id_rsa.pub | ssh user_id@host_ip 'cat >> ~/.ssh/authorized_keys'  

แทนที่ user_id และ host_ip เมื่อพร้อมต์ระบุรหัสผ่านสำหรับเครื่อง Pi

$ ssh user@ip_address

ลงชื่อเข้าใช้ PI สำเร็จแล้วไม่มีรหัสผ่านอีกต่อไป


0

dsaไม่ได้ผลสำหรับฉัน rsaได้

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat /Users/user_name/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

และฉันสามารถ ssh โดยไม่ต้องใช้รหัสผ่าน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.