Ssh

為什麼 sshd 守護程序會導致手動啟動 /usr/sbin/sshd 允許的連接失敗?

  • October 9, 2013

目標是設置 FreeNX。根據另一個serverfault 使用者的建議,我能夠測試 sshd 伺服器的各種配置sshnxsetup連接作為守護程序或手動啟動的/usr/sbin/sshd.

守護程序版本將不接受來自 nxsetup 的連接,但手動實例/usr/sbin/sshd將接受。

步驟:

  1. 啟動 ssh-agenteval $(ssh-agent)並添加 root 密鑰ssh-add
  2. 停止 sshd 守護程序,
  3. 使用以下命令啟動手動實例:
# /usr/sbin/sshd -d -p 22 -f /path/to/test/sshd_config_nx
  1. 我遇到問題的命令是:
# nxsetup --install --clean --purge
  1. 成功!但是,跳過 2、3 和連接失敗

sshd 守護程序和手冊 /usr/sbin/sshd 配置文件的設置:

/etc/ssh/sshd_config當然是守護程序的預設配置目錄。這個文件和我的測試配置,,~/sshd_config_nx(已經成為)完全相同(差異)。

成功的 ssh 測試包括:

from client over LAN to:
   - sshd server daemon
   - manual sshd server
from ssh with loopback (127.0.0.1) to:
   - sshd server daemon
   - manual sshd server

權限

我閱讀了很多關於涉及權限的 ssh/sshd 身份驗證問題的文章。我的 root 使用者具有以下權限:/root/.ssh是 700 和/root/.ssh/*600。authorized_keys2 的 nxserver 預設位置是/var/lib/nxserver/home/.ssh/. 我在這裡應用了相同的權限。/root 和 /var 之間的唯一區別是後者擁有 nx:root。出於這個原因,我為所有者和組測試了相同的權限,世界仍然為 0。這沒有任何區別,並且它對 ssh-add 進行了竊聽。所以我將它們改回 700 和 600。我沒有聽說配置權限很重要,但我使它們都相同,因為我以 root 身份執行這些命令,所以 user:group 也是相同的。

為什麼 sshd 守護程序會導致手動啟動 /usr/sbin/sshd 允許的連接失敗?

//編輯:如果我只是愚蠢的,我已經嘗試了更多的東西:

  • 分步添加 ssh-agent。
  • 我確保我對我所做的任何更改~/.ssh/var/lib/nxserver/home/.ssh權限都遵循了另一個文章的建議,該文章與守護程序有類似問題並手動啟動了 sshd#restorecon -r -vv /root/.ssh
  • 伺服器有 openssh-5.3p1-84.1.el6.i686,因此authorized_key 文件不是您所期望的。FreeNX 希望 authorized_keys2 位於 /var 目錄中。重要的是要注意 ssh 正在工作。測試 sshd_config_nx 始終使用此 /var 位置,當我嘗試通過守護程序進行 nxsetup 連接時,我切換 /etc/ssh/sshd_config 中的行(以適應 nxsetup 指令)。
  • 添加了/etc/ssh/sshd_config的 pastebin
  • 上面提到的目錄:
[root@mrwizard ~]# ls ~/.ssh
drwx------.  2 root root 4096 Oct  6 17:47 .
dr-xr-x---. 47 root root 4096 Oct  7 18:58 ..
-rw-------.  1 root root 2761 Oct  5 18:50 authorized_keys
-rw-------.  1 root root 1865 Oct  6 15:54 authorized_keys2
-rw-------.  1 root root 1679 Oct  6 15:52 authorized_keys2.new
-rw-------.  1 root root 1743 Oct  5 18:38 id_rsa
-rw-------.  1 root root  401 Oct  5 18:38 id_rsa.pub
-rw-------.  1 root root  391 Oct  6 17:47 known_hosts 

[root@mrwizard ~]# ls -al /var/lib/nxserver/home/.ssh/
drwx------. 2 nx root 4096 Oct 7 18:38 . 
drwx------. 5 nx root 4096 Oct  7 18:38 ..
-rw-------. 1 nx root  669 Oct  7 18:38 authorized_keys2
-rw-------. 1 nx root  668 Oct  7 18:38 client.id_dsa.key
-rw-r--r--. 1 nx root  392 Oct  7 18:38 known_hosts 

[root@mrwizard ~]# ls -al /etc/ssh/
drwxr-xr-x.   2 root root   4096 Oct  6 18:47 . 
drwxr-xr-x. 135 root root  12288 Oct  7 18:38 ..
-rw-------.   1 root root 125811 Feb 21  2013 moduli
-rw-r--r--.   1 root root   2061 Sep 22 14:32 ssh_config
-rw-------.   1 root root   4492 Oct  6 18:47 sshd_config
-rw-------.   1 root root    668 Oct  5 16:53 ssh_host_dsa_key
-rw-r--r--.   1 root root    590 Oct  5 16:53 ssh_host_dsa_key.pub
-rw-------.   1 root root    963 Oct  5 16:53 ssh_host_key
-rw-r--r--.   1 root root    627 Oct  5 16:53 ssh_host_key.pub
-rw-------.   1 root root   1671 Oct  5 16:53 ssh_host_rsa_key
-rw-r--r--.   1 root root    382 Oct  5 16:53 ssh_host_rsa_key.pub

您已selinux啟用。對於失敗的連接,您應該看到/var/log/audit/audit.log. 你有兩個選擇:

  • 禁用selinux. 去吧,你所有的朋友都在做。
  • 修復您的selinux配置。這可能就像fixfiles使用適當的參數執行以重新標記文件系統一樣簡單,或者可能需要顯式設置selinux文件或目錄的上下文。

如果您選擇第二個(可以說更正確但更費力)解決方案,您可能需要打開第二個問題,其中包含您的audit.log.

您可以通過執行嘗試第一個解決方案:

# setenforce 0

這將selinux進入許可模式,但在重新啟動後不會持久。要永久禁用selinux,編輯/etc/selinux/config和設置:

SELINUX=disabled

或者:

SELINUX=permissive

後一個設置將selinux保持啟用但處於許可模式,因此它將記錄違規audit.log但不會

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