天天看點

如何檢視sshd目前配置 (gcore, gdb 的妙用)

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

分析

可以看到剛才修改的配置已生效

祝大家玩得開心,歡迎随時來 阿裡雲促膝長談 業務需求 ,恭候光臨。

阿裡雲的小夥伴們加油,努力做 最貼地氣的雲資料庫 。

繼續閱讀