溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用python自定義構建交互式SSH應用程序

發(fā)布時間:2021-09-10 12:49:56 來源:億速云 閱讀:250 作者:chen 欄目:建站服務器

這篇文章主要介紹“利用python自定義構建交互式SSH應用程序”,在日常操作中,相信很多人在利用python自定義構建交互式SSH應用程序問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”利用python自定義構建交互式SSH應用程序”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!


SSH的使用模式分兩種方式交互式和非交互式的模式。在自動化系統(tǒng)中,更常用的是非交互式SSH,自動化工具都是基于這種模式,比如ansiable和salt-ssh,還有文件同步工具 rsync的SSH模式。本文我們就來說說交互式SSH應用的構建,并以Python為例實現(xiàn)了一個基本的交互式應用。

自定義 shell

服務器上,可以使用OpenSSH完成三個步驟來獲得 shell:身份驗證,shell會話和 命令。我們可以隨意配置shell(通過/etc/passwd)。例如,如果將用戶的登錄shell設置為/usr/bin/cshell,登陸后,就會運行cshell(可以為自定義的交互式程序)。shell定義也非常簡單,只需以root權限編輯/etc/passwd修改最后一個字段為自定義的shell程序既可。如果用戶通過分配的TTY(默認情況下已完成)連接到服務器,那就將能夠運行自定義的應用程序或交互式應用程序。

authorized_keys配置

需要注意的是,如果使用自定義的shell應用程序,無法接受用戶傳遞的額外 命令行參數(shù),例如ssh user@host ls -a執(zhí)行時會丟掉最后的-a參數(shù)。為了解決這個問題,需要通過覆蓋運行的命令方式,為了實現(xiàn)覆蓋運行命令的操作,我們可以使用用戶證書驗證文件authorized_keys文件。在該文件每行之前,可以添加適用于使用該密鑰登錄的用戶的選項。這些選項中有一個選項是"command"選項。比如給將/home/user/.ssh/authorized_keys添加一下語句:

command ="/usr/bin/Ccommand" ssh-rsa ... user

用戶的shell(可能應該是/bin/sh)就可以自動運行nethack,無論配置何種command,(如果需要,都存儲在環(huán)境中的SSH_ORIGINAL_COMMAND中)都會先執(zhí)行。出于安全原因,一般會設置一下限制配置:

restrict,pty,command ="…" ssh-rsa ... user

更詳細的設置選項,可以參考sshd官方手冊。默認會限制關閉大多數(shù)東西,通過pty顯式重新啟用TTY分配,這樣就可以做自定義自己的終端應用(比如Python下curses編寫的應用)。我們再來看一個典型的gitlab下典型的多用戶限制登陸型的authorized_keys配置實例:
利用python自定義構建交互式SSH應用程序
sshd_config配置

另一個可以用來配置啟動命令的地方sshd配置文件:/etc/ssh/sshd_config。通過sshd_config的AuthorizedKeysCommand來配置額外執(zhí)行命令。它設置執(zhí)行任意程序,并從標準輸出stdout獲取authorized_keys文件。比如可以配置為:

AuthorizedKeysCommand /usr/bin/Ccommand "%u" "%h" "%t" "%k"
AuthorizedKeysUser root

上面配置中的格式字符串的作用是為命令提供嘗試登錄的用戶名(%u),用戶的主目錄(%h),正在使用的密鑰類型(%t,例如ssh-rsa)和用base64編碼的公鑰(%k)。這里提供的密鑰可用于識別用戶,可以將用戶公鑰存儲在數(shù)據(jù)庫中,通過應用查詢并提供給sshd用于認證。可以在此處嵌入自定義的命令行應用。

Python交互式SSH實例

下面是一個一個簡單的的AuthorizedKeysCommand和python實例:
利用python自定義構建交互式SSH應用程序
上面 腳本中buildrht-shell命令告訴用戶使用ssh builds@buildhost connect 之類的命令進行連接,可以使用SSH_ORIGINAL_COMMAND變量來獲取其命令行:
利用python自定義構建交互式SSH應用程序
然后是身份驗證,檢查其密鑰和連接:
利用python自定義構建交互式SSH應用程序

利用python自定義構建交互式SSH應用程序
交互式SSH中最重要的是對的輸入命令進行實時的反饋。tail程序就是用來實現(xiàn)這個功能構建和打印日志給標準輸出:
利用python自定義構建交互式SSH應用程序
以上我們就構建了一個自定義的個性化的交互式SSH應用實例。

到此,關于“利用python自定義構建交互式SSH應用程序”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI