Tại sao tôi vẫn nhận được lời nhắc mật khẩu với ssh với xác thực khóa chung?


470

Tôi đang làm việc từ URL tôi tìm thấy ở đây:

http://web.archive.org/web/20160404025901/http://jaybyjayfresh.com/2009/02/04/logging-in-without-a-password-certert-ssh/

Máy khách ssh của tôi là máy tính để bàn Ubuntu 64 bit 11.10 và máy chủ của tôi là Centos 6.2 64 bit. Tôi đã làm theo hướng dẫn. Tôi vẫn nhận được một dấu nhắc mật khẩu trên ssh.

Tôi không biết phải làm gì tiếp theo.


5
đầu ra từ lệnh bạn đang đưa cho ssh với cờ -v? phải tương tự như pastebin.com/xxe57kxg
Rob

14
cũng đảm bảo thư mục .ssh của bạn làchmod 700
Rob

8
giả sử bạn có quyền truy cập root vào máy chủ, /var/log/auth.logsẽ cho bạn biết lý do đăng nhập thất bại.
UtahJarhead

5
@UtahJarhead: Trên máy chủ CentOS, có khả năng nó sẽ xuất hiện /var/log/secure.
Dennis Williamson

3
Thật thú vị, chmod 0700là câu trả lời, nhưng khi tôi thực hiện ssh -vở phía máy khách, nó không chỉ ra lỗi liên quan đến lý do tại sao khóa không được chấp nhận, họ chỉ nói rằng nó đang thử mật khẩu tiếp theo mặc dù khách hàng của tôi đã gửi khóa công khai. Làm thế nào để họ mong đợi chúng tôi chẩn đoán các vấn đề không có thông tin lỗi từ máy chủ?
void.pulum

Câu trả lời:


557

Hãy chắc chắn rằng các quyền trên ~/.sshthư mục và nội dung của nó là đúng. Khi tôi lần đầu tiên thiết lập khóa ssh auth, tôi đã không ~/.sshcài đặt đúng thư mục và nó đã mắng tôi.

  • Thư mục nhà của bạn ~, thư mục của bạn ~/.ssh~/.ssh/authorized_keystệp trên máy từ xa chỉ có thể ghi được bởi bạn: rwx------rwxr-xr-xvẫn ổn, nhưng rwxrwx---không tốt, ngay cả khi bạn là người dùng duy nhất trong nhóm của bạn (nếu bạn thích chế độ số: 700hoặc 755, không 775) .
    Nếu ~/.sshhoặc authorized_keyslà một liên kết tượng trưng, đường dẫn chính tắc (với các liên kết tượng trưng được mở rộng) được chọn .
  • Tệp của bạn ~/.ssh/authorized_keys(trên máy từ xa) phải có thể đọc được (ít nhất 400), nhưng bạn sẽ cần nó cũng có thể ghi được (600) nếu bạn sẽ thêm bất kỳ phím nào vào đó.
  • Tệp khóa riêng của bạn (trên máy cục bộ) chỉ có thể đọc và ghi được bởi bạn : rw-------, tức là 600.
  • Ngoài ra, nếu SELinux được thiết lập để thực thi, bạn có thể cần phải chạy restorecon -R -v ~/.ssh(xem ví dụ về lỗi Ubuntu 965663báo cáo lỗi Debian # 658675 ; điều này được vá trong CentOS 6 ).

¹ ngoại trừ trên một số phân phối (Debian và các dẫn xuất) đã vá mã để cho phép nhóm writability nếu bạn là người dùng duy nhất trong nhóm của bạn.


29
Cảm ơn bạn rất nhiều vì đã chỉ ra restorecon. Tôi đã gãi đầu chính xác vấn đề này được một lúc rồi.
Richard Barrell

19
Thật kỳ lạ, tôi đã gặp vấn đề với một tài khoản mà một người bạn đã thiết lập trên VPS của anh ấy để pubkey auth hoạt động. Tôi nghĩ tất cả các quyền là chính xác, nhưng điều quan trọng cần nhớ là /home/USERphải 700hoặc755
Cướp

2
Ngoài ra, hãy nhớ kiểm tra cài đặt của chủ sở hữu và nhóm, tôi đã sử dụng RSYNC để sao chép tệp tin ủy quyền và không nhận thấy rằng chủ sở hữu / nhóm được đặt thành 1000 thay vì root!
nak

11
đồng thời, thêm -v vào lệnh ssh của bạn để xem điều gì xảy ra với khóa đó. ssh -v user@host.
tedder42

14
chmod -R 700 ~/.sshlàm việc cho tôi để đáp ứng các ràng buộc của câu trả lời này (RHEL 7)
scottyseus

147

Nếu bạn có quyền truy cập root vào máy chủ, cách dễ dàng để giải quyết các vấn đề đó là chạy sshd trong chế độ gỡ lỗi, bằng cách phát hành một cái gì đó như /usr/sbin/sshd -d -p 2222trên máy chủ (yêu cầu đầy đủ đường dẫn đến sshd thực thi, which sshdcó thể trợ giúp) và sau đó kết nối từ máy khách ssh -p 2222 user@host. Điều này sẽ buộc daemon SSH ở lại nền trước và hiển thị thông tin gỡ lỗi về mọi kết nối. Tìm kiếm một cái gì đó như

debug1: trying public key file /path/to/home/.ssh/authorized_keys
...
Authentication refused: bad ownership or modes for directory /path/to/home/

Nếu không thể sử dụng một cổng thay thế, bạn có thể tạm thời dừng trình nền SSH và thay thế nó bằng một cổng trong chế độ gỡ lỗi. Dừng trình nền SSH không giết được các kết nối hiện có để có thể thực hiện việc này thông qua một thiết bị đầu cuối từ xa, nhưng hơi nguy hiểm - nếu kết nối bị hỏng bằng cách nào đó tại thời điểm khi thay thế gỡ lỗi không chạy, bạn sẽ bị khóa khỏi máy cho đến khi bạn có thể khởi động lại nó Các lệnh cần thiết:

service ssh stop
/usr/sbin/sshd -d
#...debug output...
service ssh start

(Tùy thuộc vào bản phân phối Linux của bạn, dòng đầu tiên / cuối cùng có thể là systemctl stop sshd.service/ systemctl start sshd.servicethay vào đó.)


5
Tôi mới thử cái này ... và nó hoạt động tốt khi tôi chạy sshd -d, nhưng thất bại một khi tôi thực sự chạy service sshd start. Tôi chắc chắn nó đơn giản, nhưng tôi không phải là một chuyên gia về Linux. Có suy nghĩ gì không?
N Rohler

3
Để tham khảo, bài viết này giải thích giải pháp SELinux giải quyết vấn đề của tôi.
N Rohler

2
Tôi cũng gặp rắc rối với việc xác thực khóa công khai để hoạt động và tôi khá chắc chắn rằng các quyền của thư mục không phải là vấn đề. Sau khi chạy SSH ở chế độ gỡ lỗi, tôi nhanh chóng phát hiện ra rằng mình đã sai và quyền là vấn đề.
ub3rst4r

3
Lời khuyên tuyệt vời, thư mục người dùng của tôi là với các quyền sai.
gdfbarbosa

2
Cảm ơn bạn. Trong tất cả các lý do, người dùng của tôi không được phép đăng nhập vì lớp vỏ được chỉ định bởi ansible (/ bin / zsh) khi tạo người dùng không tồn tại. Tôi sẽ không bao giờ đoán được điều đó.
chishaku

53

Là dir nhà của bạn được mã hóa? Nếu vậy, đối với phiên ssh đầu tiên của bạn, bạn sẽ phải cung cấp mật khẩu. Phiên ssh thứ hai cho cùng một máy chủ đang hoạt động với khóa auth. Nếu đây là trường hợp, bạn có thể di chuyển authorized_keysđến một thư mục không được mã hóa và thay đổi đường dẫn trong ~/.ssh/config.

Điều cuối cùng tôi làm là tạo một /etc/ssh/usernamethư mục, được sở hữu bởi tên người dùng, với các quyền chính xác và đặt authorized_keystệp vào đó. Sau đó thay đổi chỉ thị AuthorizedKeysFile /etc/ssh/configthành:

AuthorizedKeysFile    /etc/ssh/%u/authorized_keys

Điều này cho phép nhiều người dùng có quyền truy cập ssh này mà không ảnh hưởng đến quyền.



3
Câu trả lời này là một câu hỏi nổi bật & đã giúp tôi - cho bất kỳ ai tự hỏi liệu đây có phải là vấn đề không - bạn có thể thấy "pam_ecryptfs: Tệp mật khẩu được gói" trong auth.log của bạn; bằng cách nào đó không đủ để nhắc tôi nhớ homedir đã được mã hóa. Ngoài ra, bạn có thể tìm thấy thông tin đăng nhập đầu tiên yêu cầu mật khẩu, các phiên tiếp theo không (vì nó được giải mã trong khi các phiên khác mở).
hòa bình

Chúa ơi, tôi đã tìm cách ngớ ngẩn từ lâu để giải quyết vấn đề đó, làm phiền bạn rất nhiều!
h3.

33

Sau khi sao chép các phím vào máy từ xa và đặt chúng vào trong, authorized_keysbạn phải làm một cái gì đó như thế này:

ssh-agent bash
ssh-add ~/.ssh/id_dsa or id_rsa

1
Thật ra không có bạn. ssh tự động sử dụng ~ / .ssh / id_rsa (hoặc id_dsa) mà không phải sử dụng tác nhân chính.
Patrick

7
Đây vẫn có thể là lời khuyên hữu ích nếu người ta chỉ định một khóa có tên khác trong ~ / .ssh / config (ví dụ: trên máy chủ * .mydomain.org ... IdentityFile ~ / .ssh / some_liated_use.pub - ssh-add ~ / .ssh / some_lrict_use.pub).
89c3b1b8-b1ae-11e6-b842-48d705

Điều này đã giải quyết vấn đề của tôi với việc nhận được lời nhắc mật khẩu sau khi thêm khóa. Như 89c3b1b8-b1ae-11e6-b842-48d705 đã chỉ ra, lý do để chạy các lệnh này theo cách thủ công là tên không chuẩn của tệp chính.
Михаил Лисаков

Như đã chỉ ra ở trên trong các nhận xét, nếu bạn đang sử dụng bất kỳ khóa nào ngoài khóa mặc định, nó không được thêm vào mặc định cho tác nhân ssh. Vì vậy, hãy chắc chắn kiểm tra khóa bạn muốn sử dụng có trong móc khóa của đại lý:ssh-add -L
James

30

Chỉ cần thử các lệnh sau

  1. ssh-keygen

    Nhấn phím Enter cho đến khi bạn nhận được lời nhắc

  2. ssh-copy-id -i root@ip_address

    (Nó sẽ yêu cầu mật khẩu của hệ thống máy chủ một lần)

  3. ssh root@ip_address

    Bây giờ bạn có thể đăng nhập mà không cần bất kỳ mật khẩu


1
Trên máy chủ nào?
Amalgovinus

@Amalgovinus Rõ ràng là bạn chạy cái này trên máy khách, không phải máy bạn đang kết nối - bạn không muốn có một bản sao khóa riêng của mình trên máy chủ! :)
nevelis

4
Xin lưu ý rằng thông thường, cho phép đăng nhập root từ xa không phải là một thực tiễn bảo mật được khuyến nghị.
thân

27

Tôi đã đối mặt với những thách thức khi thư mục nhà trên điều khiển từ xa không có đặc quyền chính xác. Trong trường hợp của tôi, người dùng đã thay đổi thư mục nhà thành 777 cho một số quyền truy cập cục bộ trong nhóm. Máy không thể kết nối với các phím ssh nữa. Tôi đã thay đổi quyền thành 744 và nó bắt đầu hoạt động trở lại.


7
Chúng tôi cũng có vấn đề này - 755 trên các thư mục nhà đã sửa nó
davidfrancis

Tôi đã có quyền được đặt thành 777 và nó đã bị bỏ qua, cảm ơn !!!
ka_lin

Tương tự ở đây. Cảm ơn. Đã gãi đầu tôi một lúc, wtf đã xảy ra.
Marcin

Có, xem câu trả lời ở đây để biết thêm chi tiết unix.stackexchange.com/questions/205842/iêu
Tim

Đây cũng có thể là câu trả lời cho những người đã thực hiện việc tạo khóa một cách chính xác nhưng vẫn đang được nhắc nhập mật khẩu.
Fergie

14

SELinux trên RedHat / CentOS 6 có vấn đề với xác thực pubkey , có thể khi một số tệp được tạo, selinux không đặt ACL chính xác.

Để sửa lỗi thủ công ACL SElinux cho người dùng root:

restorecon -R -v /root/.ssh

bằng cách sử dụng máy khách openssh trên windows tôi đã có thể ssh root@mymachinevào CentOS6 mymachinemà không gặp vấn đề gì, nhưng tôi có một người dùng có quyền riêng tư thấp hơn mà tôi muốn sử dụng, nhưng ssh regularUser@mymachinevẫn nhắc tôi nhập mật khẩu. suy nghĩ?
Groostav

13

Chúng tôi gặp vấn đề tương tự và chúng tôi đã làm theo các bước trong câu trả lời. Nhưng nó vẫn không làm việc cho chúng tôi. Vấn đề của chúng tôi là đăng nhập làm việc từ một khách hàng nhưng không phải từ một khách hàng khác (thư mục .ssh được gắn NFS và cả hai khách hàng đang sử dụng cùng một khóa).

Vì vậy, chúng tôi đã phải đi một bước xa hơn. Bằng cách chạy lệnh ssh trong chế độ dài, bạn sẽ có được nhiều thông tin.

ssh -vv user@host

Những gì chúng tôi phát hiện ra là khóa mặc định (id_rsa) không được chấp nhận và thay vào đó, máy khách ssh cung cấp một khóa khớp với tên máy chủ của máy khách:

debug1: Offering public key: /home/user/.ssh/id_rsa                                    
debug2: we sent a publickey packet, wait for reply                                        
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering public key: /home/user/.ssh/id_dsa                                    
debug2: we sent a publickey packet, wait for reply                                        
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering public key: user@myclient                                          
debug2: we sent a publickey packet, wait for reply                                        
debug1: Server accepts key: pkalg ssh-rsa blen 277                  

Rõ ràng điều này sẽ không hoạt động từ bất kỳ khách hàng khác.

Vì vậy, giải pháp trong trường hợp của chúng tôi là chuyển khóa rsa mặc định sang khóa có chứa user @ myclient. Khi một khóa được mặc định, không có kiểm tra tên khách hàng.

Sau đó, chúng tôi gặp vấn đề khác, sau khi chuyển đổi. Rõ ràng các khóa được lưu trong bộ đệm ssh cục bộ và chúng tôi đã gặp lỗi sau trong nhật ký gỡ lỗi:

'Agent admitted failure to sign using the key'

Điều này đã được giải quyết bằng cách tải lại các khóa cho tác nhân ssh:

ssh-add

9

Nó sẽ là SSH bỏ lỡ cấu hình ở cuối máy chủ. Tập tin sshd_config phía máy chủ phải được chỉnh sửa. Nằm trong /etc/ssh/sshd_config. Trong tệp đó, thay đổi biến

  • 'có' thành 'không' đối với ChallengeResponseAuthentication, PasswordAuthentication, UsePAM

  • 'không' thành 'có' cho PubkeyAuthentication

Dựa trên http://kaotickreation.com/2008/05/21/disable-ssh-password-authentication-for-added-security/


1
Như trong các bình luận cho câu hỏi, hãy kiểm tra / var / log / safe hoặc /var/log/auth.log. Trong trường hợp của tôi, tôi thấy "Người dùng xxx từ xxx không được phép vì không được liệt kê trong Cho phép người dùng" "input_userauth_Vquest: người dùng không hợp lệ xxx [preauth]" (và "dòng rexec 35: Tùy chọn không dùng nữa ServerKeyBits" trong / var / log / message mặc dù tôi không biết gì đó là). Để giải quyết vi /etc/ssh/sshd_config, hãy thêm người dùng xxx vào danh sách Cho phép người dùng, service sshd restart*** BEWARE khởi động lại dịch vụ sshd với sshd_config xấu có thể khóa bạn khỏi hộp!? ***. Điều đó đã làm việc.
gaoithe

6

Đảm bảo rằng AuthorizedKeysFiletrỏ đến đúng vị trí, sử dụng %unhư một trình giữ chỗ cho tên người dùng:

# /etc/ssh/sshd_config
AuthorizedKeysFile /home/%u/authorized_keys

Nó có thể là bạn chỉ cần bỏ ghi chú dòng:

AuthorizedKeysFile .ssh / ủy quyền

Lưu ý rằng bạn phải tải lại dịch vụ ssh để thay đổi diễn ra:

service sshd reload

4

Hai ý kiến: điều này sẽ ghi đè lên tập tin gốc. Tôi chỉ cần sao chép khóa công khai được tạo và làm một cái gì đó như:

cat your_public_key.pub >> .ssh/authorized_keys

Điều này sẽ nối thêm khóa bạn muốn sử dụng vào danh sách các khóa có sẵn. Ngoài ra, một số hệ thống sử dụng tệp authorized_keys2, do đó, nên tạo một liên kết cứng trỏ giữa authorized_keysauthorized_keys2, chỉ trong trường hợp.


Vâng, tôi cũng nhận thấy rằng về phần ghi đè, nhưng tôi không có, vì vậy nó không thành vấn đề. Tôi đã tạo một liên kết tượng trưng đến Author_keys2 nhưng điều đó không giúp được gì.
Thơm

Ngoài ra, kiểm tra các quyền tập tin / thư mục. Chúng được mô tả trên trang web bạn cung cấp.
Wojtek Rzepala

3
thư mục ~ / .ssh của bạn phải là 700 tệp khóa riêng của bạn phải là 600 tệp khóa công khai của bạn phải là 644 tệp xác thực của bạn (trên điều khiển từ xa) phải là 644
Rob

@Rob đó là vấn đề. Nếu bạn đăng nó như một câu trả lời, tôi sẽ chấp nhận nó.
Thơm

4

Giải pháp của tôi là tài khoản đã bị khóa. Thông báo được tìm thấy trong / var / log / safe: Người dùng không được phép vì tài khoản bị khóa Giải pháp: cung cấp cho người dùng mật khẩu mới.


Tôi cố định nó bằng cách thay đổi lĩnh vực mật khẩu trong /etc/shadowcho người dùng này từ !đến *. Sau đó, xác thực mật khẩu vẫn không thể, nhưng người dùng không bị khóa nữa.
dùng3132194

4

Tôi gặp vấn đề tương tự và làm theo các bước sử dụng chế độ gỡ lỗi.

/usr/sbin/sshd -d

Điều này cho thấy kết quả sau đây

debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: bad ownership or modes for directory /root
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys2
debug1: Could not open authorized keys '/root/.ssh/authorized_keys2': No such file or directory
debug1: restore_uid: 0/0
Failed publickey for root from 135.250.24.32 port 54553 ssh2
debug1: userauth-request for user root service ssh-connection method gssapi-with-mic

Nó thực sự khó hiểu

[root@sys-135 ~]# ls -l /
drwxrwxrwx.   2 root root     4096 Dec 14 20:05 bin
drwxrwxrwx.   5 root root     1024 May  6  2014 boot
drwxrwxrwx.   2 root root     4096 Dec  2  2013 cgroup
drwxrwxrwx.  10 root root     1024 Sep 25 23:46 data
drwxrwxrwx. 124 root root    12288 Dec 16 10:26 etc
drwxrwxrwx.  11 root root     4096 Jan 14  2014 lib
drwxrwxrwx.   9 root root    12288 Dec 14 20:05 lib64
drwxrwxrwx.   2 root root    16384 Jan 10  2014 lost+found
drwxrwxrwx.   2 root root     4096 Jun 28  2011 media
drwxr-xr-x.   2 root root        0 Dec 10 14:35 misc
drwxrwxrwx.   2 root root     4096 Jun 28  2011 mnt
drwxrwxrwx.   4 root root     4096 Nov 24 23:13 opt
dr-xr-xr-x. 580 root root        0 Dec 10 14:35 proc
drwxrwxrwx.  45 root root     4096 Dec 16 10:26 root

Nó cho thấy thư mục gốc có quyền cho mọi người. Chúng tôi đã thay đổi nó để những người khác sẽ không có quyền.

[root@sys-135 ~]# chmod 750 /root

Xác thực khóa bắt đầu làm việc.


Tôi có vấn đề tương tự. Hôm qua, tôi đã phát hành rsync -av ./root/ root@THE_HOST:/rootđể tải lên một số tệp từ thư mục làm việc tại địa phương của mình, sau đó, sự cố này xảy ra (thực tế, lúc đầu tôi không nhận thấy điều đó. Sau khi công việc cron trong các máy chủ khác thất bại vào sáng hôm sau, tôi bắt đầu đào lý do) . Các rsync -av ./root/ root@THE_HOST:/rootlệnh thay đổi chủ sở hữu và được phép của /rootthư mục của các máy chủ từ xa. Đã sửa lỗi, giải quyết vấn đề.
LiuYan 刘

Failed publickey for root from 135.250.24.32 port 54553 ssh2Tôi nhận được thông báo và vấn đề tương tự khi tôi quên thêm pubkey vào máy chủ authorized_keys. Thêm nhận xét này như trong trường hợp của tôi, tôi thường nhận ra lỗi của mình sau khi tôi kiểm tra gỡ lỗi và tất cả các quyền cộng với tệp cấu hình #: o <
tuk0z

3

Trong tập tin / etc / selinux / config thay đổi SELINUX thành vô hiệu hóa để thực thi ssh không mật khẩu đã làm việc thành công.

Trước đó tôi có thể làm điều đó trên một cách. Bây giờ từ cả hai chiều tôi có thể làm ssh không mật khẩu.


3

Một điều mà tôi đã sai là quyền sở hữu trên thư mục nhà của tôi trên hệ thống máy chủ. Hệ thống máy chủ được đặt thành mặc định: mặc định nên tôi:

chown -R root:root /root

Va no đa hoạt động. Một cách giải quyết khác giá rẻ là Vô hiệu hóa StrictModes: StirctModes no. trong sshd_config. Điều này ít nhất sẽ cho bạn biết nếu các giao thức trao đổi và kết nối khóa là tốt. Sau đó, bạn có thể đi săn các quyền xấu.


Tôi cũng vậy. Nhìn vào các thông báo trong / var / log / safe. Tôi thấy một thông báo: "Xác thực bị từ chối: quyền sở hữu hoặc chế độ xấu cho thư mục" ($ HOME). Đảm bảo không có quyền ghi vào $ HOME vào nhóm hoặc khác. Tôi chưa bao giờ tìm thấy điều này nếu tôi không có quyền truy cập root trái phép vào máy chủ ....
SoloPilot

2

Đối với tôi, giải pháp này trái ngược với Wojtek Rzepala : Tôi không nhận thấy mình vẫn đang sử dụng authorized_keys2, thứ đã bị phản đối . Thiết lập ssh của tôi đã ngừng hoạt động tại một số điểm, có lẽ là khi máy chủ được cập nhật. Đổi tên .ssh/authorized_keys2như đã .ssh/authorized_keyssửa vấn đề.

Ôi!


Đây cũng là một tùy chọn cấu hình trong / etc / ssh / sshd_config, mặc dù tôi nghĩ tôi sẽ đổi tên nó như bạn đã làm.
Rick Smith

2

Trước đây tôi đã bắt gặp một số hướng dẫn mô tả cách đạt được thiết lập không cần mật khẩu ssh, nhưng một số sai lầm đáng buồn.
Hãy bắt đầu lại và kiểm tra từng bước:

  1. TỪ KHÁCH HÀNG - Tạo khóa: Khóa chung ssh-keygen -t rsa
    và khóa riêng ( id_rsa.pubid_rsa) sẽ được lưu tự động trong ~/.ssh/thư mục.
    Thiết lập sẽ dễ dàng hơn nếu bạn sử dụng cụm mật khẩu trống. Nếu bạn không sẵn sàng làm điều đó, thì vẫn làm theo hướng dẫn này, nhưng cũng kiểm tra điểm đạn bên dưới.

  2. TỪ KHÁCH HÀNG - Sao chép khóa chung vào máy chủ : Khóa chung của máyssh-copy-id user@server
    khách sẽ được sao chép vào vị trí của máy chủ ~/.ssh/authorized_keys .

  3. TỪ KHÁCH HÀNG - Kết nối với máy chủ:ssh user@server

Bây giờ, nếu nó vẫn không hoạt động sau 3 bước được mô tả, hãy thử các cách sau:

  • Kiểm tra ~/sshquyền thư mục trong máy kháchmáy chủ .
  • Kiểm tra /etc/ssh/sshd_configtrong máy chủ để đảm bảo rằng RSAAuthentication, PubkeyAuthenticationUsePAMtùy chọn không bị khuyết tật, chúng có thể được kích hoạt theo mặc định với yes.
  • Nếu bạn đã nhập cụm mật khẩu trong khi tạo khóa máy khách, thì bạn có thể thử ssh-agent& ssh-addđể đạt được các kết nối không cần mật khẩu trong phiên của mình.
  • Kiểm tra nội dung /var/log/auth.logtrên máy chủ để tìm ra vấn đề tại sao xác thực khóa bị bỏ qua.

Cảm ơn vì đã liệt kê ra các bước! Tôi đã truy cập "ssh-copy-id user @ server" và nhận ra rằng ban đầu tôi đã sao chép sai khóa công khai.
mattavatar

2

Tôi đã gặp vấn đề chính xác tương tự với PuTTY khi kết nối với máy Ubuntu 16.04. Thật khó hiểu vì chương trình pscp của PuTTY đã hoạt động tốt với cùng một khóa (và cùng một khóa hoạt động trong PuTTY để kết nối với máy chủ khác).

Nhờ nhận xét có giá trị từ @UtahJarhead, tôi đã kiểm tra tệp /var/log/auth.log của mình và tìm thấy như sau:

sshd[17278]: userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]

Hóa ra các phiên bản mới hơn của OpenSSH không chấp nhận các khóa DSA theo mặc định. Khi tôi chuyển từ DSA sang khóa RSA, nó hoạt động tốt.

Một cách tiếp cận khác: câu hỏi này thảo luận về cách định cấu hình máy chủ SSH để chấp nhận khóa DSA: https://superuser.com/questions/1016989/ssh-dsa-keys-no-longer-work-for-password-less-authentication?lq = 1


1

Những bước này sẽ giúp bạn ra ngoài. Tôi sử dụng điều này thường xuyên trong số nhiều máy Ubuntu 10.04 64 bit.

[ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -t rsa;
ssh <username>@<remote_machine> 'mkdir -p ~/.ssh'
cat ~/.ssh/id_rsa.pub | ssh <username>@<remote_machine> 'cat >> ~/.ssh/authorized_keys'

bạn có thể đặt nó trong một kịch bản với một số lời nhắc và gọi nó là

script_name username remote_machine

Có tồn tại ssh-copy-idhai bước cuối cùng tự động.
jofel

2
@jofel hãy nhớ rằng trong nhiều hệ thống, ssh-copy-id không tồn tại. @Sriharsha sau khi mkdirbạn cũng nên thêm vào đó chmod 700 .sshvà btw bạn không cần phải quá dài dòng ~/.ssh, chỉ .sshlà đủ vì các lệnh được thực thi trong thư mục chính dù sao
janos

1

Tôi đã có vấn đề tương tự với ssh. Trong trường hợp của tôi, vấn đề là tôi đã cài đặt hadoop cloudera (từ vòng / phút trên centos 6) và nó đã tạo ra các hdfs người dùng với thư mục chính

/var/lib/hadoop-hdfs(không chuẩn /home/hdfs).

Tôi đã thay đổi trong / etc / passwd /var/lib/hadoop-hdfsthành /home/hdfs, chuyển thư mục chính sang vị trí mới và bây giờ tôi có thể kết nối với xác thực khóa chung.


1

Tôi chỉ gặp vấn đề tương tự, và đối với tôi, giải pháp là đặt UsePAMra no. Xem, ngay cả khi PasswordAuthenticationđược đặt thành no, bạn vẫn sẽ nhận được keyboard-interactivevà trong trường hợp của tôi, chương trình ssh cục bộ của tôi tiếp tục mặc định như vậy, vì một số lý do.

Nền tảng bổ sung để giúp bất kỳ ai có cùng hoàn cảnh: Tôi đang kết nối từ máy chủ đang chạy Dropbear đến một máy đang chạy OpenSSH. Với PasswordAuthenticationUsePAMcả hai được đặt notrên máy từ xa, tôi sẽ nhận được thông báo sau nếu tôi nhập ssh user@server:

ssh: Connection to user@server:22 exited: Disconnect received

Cung cấp các tập tin nhận dạng với -i, mọi thứ hoạt động như mong đợi.

Có thể có thêm một chút thông tin ở đây.


1

Sau khi kiểm tra các quyền và thử một số giải pháp khác được liệt kê ở đây, cuối cùng tôi đã xóa thư mục ssh trên máy chủ, thiết lập lại khóa công khai của tôi.

Lệnh máy chủ:

# rm -rf ~/.ssh

Các lệnh cục bộ:

# ssh-copy-id user@192.168.1.1        # where <user> is your username and <192.168.1.1> is the server IP

1

Tại máy chủ:

$ ls -lh /home
$ sudo chmod 700 /home/$USER

Nó đã được directory permission issue. Đó là 777 tại máy chủ, vì vậy I changed it back to 700. Đây fixedlà vấn đề của tôi với ssh password less login failurengay cả sau khi sao chép $USER/.ssh/id_rsa.pubvào máy chủ $USER/.ssh/authorized_keys.



0

Tuy nhiên, một lựa chọn khác là một biến thể của câu trả lời của @Jagadish : cho stracedaemon ssh.

Nó có một lợi thế đáng kể, đó là chúng ta không cần phải dừng sshd, điều gì có thể dẫn đến việc khóa hoàn toàn nếu có vấn đề gì xảy ra.

Đầu tiên, chúng tôi tìm thấy pid của quá trình sshd chính. Ở đây chúng ta có thể thấy nó bằng cách thực hiện a pstree -pa|less.

  |-sshd,633 -D  <-- THIS IS WHAT WE WANT!
  |   `-sshd,21973   
  |       `-sshd,21996    
  |           `-bash,22000
  |               `-screen,638 -r

Sau khi biết, pid là 633, chúng ta có thể strace, theo con của nó:

strace -p 633 -s 4096 -f -o sux

Kết quả sẽ là mọi thứ mà sshd này và các tiến trình con của nó đã thực hiện sẽ được strace-ed vào tệp có tên suxtrong thư mục cục bộ.

Sau đó tái tạo vấn đề.

Nó sẽ có một danh sách lớn nhật ký cuộc gọi kernel, hầu hết không thể hiểu được / không liên quan đến chúng tôi, nhưng không phải ở đâu cũng có. Trong trường hợp của tôi, điều quan trọng là:

6834  sendto(4, "<38>Jan 15 18:49:21 sshd[6834]: User cica not allowed because account is locked\0", 84, MSG_NOSIGNAL, NULL, 0) = 84

Điều đó có nghĩa là, sshd đã cố gắng đăng nhập tin nhắn Người dùng cica không được phép vì tài khoản bị khóa - điều đó là không thể, bởi vì việc đăng nhập không đủ dài dòng cho điều đó. Nhưng chúng ta đã biết, pubkey đã bị từ chối vì tài khoản đã bị khóa.

Nó vẫn chưa phải là một giải pháp - bây giờ chúng ta cần google, nghĩa là "tài khoản bị khóa" trong trường hợp của sshd. Nó rất có thể là một số tầm thường /etc/passwd, /etc/shadowphù thủy, nhưng điều quan trọng đã được thực hiện - vấn đề không phải là một bí ẩn, mà là một vấn đề dễ bị gỡ lỗi / googlable.


0

Trong trường hợp của tôi, tôi có tất cả các quyền và ngay cả khi chạy ssh với cờ -vvv, tôi không thể tìm ra vấn đề là gì.

Vì vậy, tôi đã tạo chứng chỉ mới trên máy chủ từ xa

ssh-keygen -t rsa -C "your_email@example.com"

và sao chép các khóa được tạo vào máy cục bộ và thêm khóa công khai mới vào ~ / .ssh / ủy quyền trên máy chủ từ xa

cat id_rsa.pub >> authorized_keys

Sử dụng các phím được tạo từ kết nối máy chủ từ xa hiện hoạt động. Vì vậy, nếu các giải pháp khác thất bại thì đây là một điều khác để thử.


0

Kịch bản của tôi là tôi có một máy chủ NAS mà tôi đã tạo một backupbotngười dùng, sau khi tạo tài khoản chính của tôi, có thể đăng nhập để tạo backupbotngười dùng ban đầu . Sau khi đấu tranh sudo vim /etc/ssh/sshd_configvà tạo backupbotngười dùng, vimcó thể tạo, ít nhất là trên Ubuntu 16.04 và dựa trên ~/.vimrccấu hình của bạn , một tệp hoán đổi còn lại từ chỉnh sửa phiên vim của bạn /etc/ssh/sshd_config.

Kiểm tra xem nếu: /etc/ssh/.sshd_config.swptồn tại và nếu nó loại bỏ nó và khởi động lại sshddaemon:

$ sudo rm /etc/ssh/.sshd_config.swp
$ sudo service sshd restart

Điều này kỳ diệu giải quyết vấn đề của tôi. Trước đây tôi đã kiểm tra tất cả các quyền của mình và thậm chí dấu vân tay RSA của khóa công khai và khóa riêng. Điều này là lạ và có thể là một lỗi với sshd, cụ thể là phiên bản này:

OpenSSH_7.4p1 Ubuntu-10, OpenSSL 1.0.2g ngày 1 tháng 3 năm 2016

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.