linux sshd沒有提供顯示目前sshd的配置的接口,是以當我們需要了解它的配置時,怎麼辦呢?
另外我們還不知道sshd已經加載的配置檔案名,這有從何下手呢?
本文将結合openssh的源碼,給大家一種取得目前sshd配置的方法。
調用sshd程序,并且通過strace輸出open file。
就可以從中得知sshd将要打開的配置檔案。
檢視strace的結果
open("/etc/ssh/sshd_config", o_rdonly) = 3 // 找到你了
注意,這是将要打開的,已經啟動的sshd讀過哪個配置檔案,哪些配置,不得而知,那麼怎麼知道目前sshd的配置呢?
因為sshd沒有提供接口,是以我們需要用gcore把程序的記憶體dump出來,到記憶體中檢視它的配置。
使用gcore 将pid的memory dump出來
使用gdb 分析
由于沒有按照debuginfo包,會提示按照,否則沒有符号表資訊。
按照缺失的debuginfo包
重新gdb
那麼我怎麼知道配置對應的變量呢?
在這個openssh的源碼檔案中搜尋到了 /etc/ssh/sshd_config 裡的配置項
/usr/src/debug/openssh-6.4p1/servconf.c
是以要檢視目前sshd程序的配置,列印options即可
在這裡我們看到了目前sshd程序的配置。
例如
我們看看修改配置後,重新dump看看是不是會發生變化
修改前面使用strace跟蹤到的配置檔案
檢查配置檔案是否正确
使得配置檔案生效
重新gcore
分析
可以看到剛才修改的配置已生效
祝大家玩得開心,歡迎随時來 阿裡雲促膝長談 業務需求 ,恭候光臨。
阿裡雲的小夥伴們加油,努力做 最貼地氣的雲資料庫 。