Linux

僅當 sshd 是守護程序時,公鑰認證才會失敗

  • December 24, 2020

我不知道這是怎麼發生的。該發行版是 Scientific Linux 6.1,一切都設置為通過公鑰執行身份驗證。然而,當 sshd 作為守護程序執行時(服務 sshd 啟動),它不接受公鑰。(為了獲取這條日誌,我更改了 sshd 腳本以添加 -ddd 選項)

debug1: trying public key file /root/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys2
debug1: restore_uid: 0/0
Failed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug3: mm_answer_keyallowed: key 0x7f266e1a8840 is not allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
debug3: Wrote 64 bytes for a total of 1853
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 1

如果 sshd 在調試模式下執行/usr/sbin/sshd -ddd,身份驗證就像一個魅力:

debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
debug1: matching key found: file /root/.ssh/authorized_keys, line 1
Found matching RSA key: d7:3a:08:39:f7:28:dc:ea:f3:71:7c:23:92:02:02:d8
debug1: restore_uid: 0/0
debug3: mm_answer_keyallowed: key 0x7f85527ef230 is allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug3: Wrote 320 bytes for a total of 2109
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
Postponed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 0

有任何想法嗎??有沒有人見過這樣的事情?

筆記:

文件權限已經過雙重檢查:

# ll -d .ssh
drwx------. 2 root root 4096 Oct 14 10:05 .ssh
# ll .ssh
total 16
-rw-------. 1 root root  786 Oct 14 09:35 authorized_keys
-rw-------. 1 root root 1675 Oct 13 08:24 id_rsa
-rw-r--r--. 1 root root  393 Oct 13 08:24 id_rsa.pub
-rw-r--r--. 1 root root  448 Oct 13 12:51 known_hosts

有人問我 sshd 是否可以在“守護程序模式”下訪問 root 的文件。我對這個問題最接近的答案是:

# netstat -ntap | grep 22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      19847/sshd 
# ps -ef | grep 19847
root     19847     1  0 09:58 ?        00:00:00 /usr/sbin/sshd

如果 sshd 以 root 身份執行,我不知道如何無法訪問它自己的文件。SELinux 可能是原因嗎?

是的,SELinux 可能是原因。目錄可能被.ssh貼錯標籤。看/var/log/audit/audit.log。它應該被標記ssh_home_t。檢查與ls -laZrestorecon -r -vv /root/.ssh如果需要,執行。

我遇到過同樣的問題。就我而言,restorecon 和 chcon 不起作用。

我不想禁用 selinux。經過大量研究,我最終認為這是因為我的主目錄是從其他地方(NFS)掛載的。我發現了這個錯誤報告,它提示了我。

我跑了:

> getsebool use_nfs_home_dirs
use_nfs_home_dirs --> off

確認 use_nfs_home_dirs 已關閉,然後:

sudo setsebool -P use_nfs_home_dirs 1

打開它。

現在我可以使用我的密鑰 ssh 到我的機器,而無需輸入密碼。我需要切換 use_home_nfs_dirs 布爾值。

引用自:https://serverfault.com/questions/321534