為任何/每個連接使用者名配置 OpenSSH shell
使用 Debian 的預設 OpenSSH sshd 包,有沒有辦法將其配置為將每個使用者名視為相同?
例如,如果某人連接了一個隨機使用者名(即:8LaRiQRd8Qjh),而該使用者名並不作為 Linux 使用者存在,我可以配置 sshd 以將其視為一些一致的使用者名,如“testuser”嗎?
我知道從 SSH 客戶端的角度來看如何做到這一點,但我希望 SSH 伺服器本身接受任何連接憑據(允許我的 shell 處理該級別的身份驗證)。
理想情況下,我想要的是一條規則,例如“如果沒有現有的使用者名,請改用這個”。甚至“始終使用此使用者名”也可以,只是不太理想。
使用預設的 OpenSSH sshd 服務而不是執行我自己的 sshd 服務找到一個簡單的解決方案會很好。
我不知道你為什麼要這樣做,這似乎是一個糟糕的主意。
也就是說,出於某種原因,這個問題讓我著迷,我需要找到答案。
簡短的回答是,這不能通過簡單地在 debian 中配置可用的包來完成。
如果你想這樣做,你必須編寫兩個模組:一個用於 NSS,一個用於 PAM。
對於NSS 模組,您至少需要提供
_getpwbynam_r
. 對於PAM 模組,還有更多樣板文件。這似乎需要做很多工作,而不是您想要的,但既然您提到您想自己處理身份驗證,這就是這樣做的方法。
一個更簡單的選擇(並且可能不太安全)是使用paramiko設置 Python SSH 伺服器並自定義/掛鉤身份驗證功能。
幸運的是,paramiko 的人已經在他們的 repo中的這個展示伺服器中完成了大部分繁重的工作。
通過替換
check_auth_password
orcheck_auth_publickey
您可以接受任何使用者為有效使用者。**密碼驗證(*)**的範例:# pip install pam import pam MYUSER = 'testuser' class Server(paramiko.ServerInterface): def check_auth_password(self, username, password): if password and pam.authenticate(username=MYUSER, password=password): return paramiko.AUTH_SUCCESSFUL return paramiko.AUTH_FAILED
由於這不是 StackOverflow,我將停在那裡 :)
這將創建一個 ssh 伺服器,它將忽略使用者名進行密碼驗證,並將檢查給定的密碼
testuser
。預設情況下,此伺服器將提示輸入名稱並退出。您可能希望將其替換為 shell 或您的自定義應用程序。
我對使用者名進行了硬編碼,但您可以輕鬆地從配置文件或數據庫查找或其他任何東西中獲取它。
您可能還想替換
host_key
變數,也許還需要替換埠號。有很多方法可以用這個來擊中自己的腳。你應該非常非常非常小心。此程式碼尚未準備好生產,請查看整個內容。如果您沒有發現任何錯誤,則說明您沒有進行良好的審查;-)。
*****:這只是替換
Server
類中的一個函式demo_server.py
並在頂部添加一些東西