Linux多sshd啓動問題

2020-08-12 10:34:53

一個環境中啓動多個sshd,監聽不同的埠

問題

環境中啓用兩個sshd,一個監聽22223埠,一個監聽33332埠,監聽22223埠的組態檔放在/etc/sshd/sshd_config(爲安裝sshd後預設設定),監聽33332埠的組態檔放在/opt/data/luban/luban_c/build/luban_sshd_config(自定義設定),設定22223的sshd開機不自啓,發現33332的sshd啓動不起來

問題原因

sshd啓動時設定了許可權分離目錄,一般是在sshd安裝時就指定了,可以通過/etc/passwd檢視
centos系統爲/var/empty/sshd

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

uos系統/run/sshd

sshd:x:110:65534::/run/sshd:/usr/sbin/nologin

kylin系統/var/run/sshd

sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin

問題主要出現在uos和kylin系統上,因爲系統重新啓動之後/run和/var/run目錄下的檔案會被清除掉
而在uos和kylin系統上系統安裝的sshd(監聽22223埠)會自動建立/run/sshd或者/var/run/sshd目錄,可檢視這兩個系統上的/etc/init.d/ssh,而我們自己寫的/etc/init.d/luban-sshd是沒有這個操作的

check_privsep_dir() {
    # Create the PrivSep empty dir if necessary
    if [ ! -d /run/sshd ]; then
	mkdir /run/sshd
	chmod 0755 /run/sshd
    fi
}

解決方法

在我們自定義的指令碼luban-sshd啓動指令碼中增加建立目錄的操作,由於系統不一樣,目錄會不一樣,因此要動態獲取

privsep_dir=$(grep "^sshd" /etc/passwd | awk -F":" '{print $6}')
if [ ! -d $privsep_dir ];then
    mkdir -p $privsep_dir
    chmod 755 $privsep_dir
fi

鏈接: https://blog.51cto.com/dongyulong/476547.