自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

開(kāi)發(fā) 后端 數(shù)據(jù)庫(kù)
SSH的使用模式分兩種方式交互式和非交互式的模式。在自動(dòng)化系統(tǒng)中,更常用的是非交互式SSH,自動(dòng)化工具都是基于這種模式,比如ansiable和salt-ssh,還有文件同步工具 rsync的SSH模式。本文我們就來(lái)說(shuō)說(shuō)交互式SSH應(yīng)用的構(gòu)建,并以Python為例實(shí)現(xiàn)了一個(gè)基本的交互式應(yīng)用。

[[276121]]

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

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

自定義shell

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

authorized_keys配置

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

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

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

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

更詳細(xì)的設(shè)置選項(xiàng),可以參考sshd官方手冊(cè)。默認(rèn)會(huì)限制關(guān)閉大多數(shù)東西,通過(guò)pty顯式重新啟用TTY分配,這樣就可以做自定義自己的終端應(yīng)用(比如Python下curses編寫的應(yīng)用)。我們?cè)賮?lái)看一個(gè)典型的gitlab下典型的多用戶限制登陸型的authorized_keys配置實(shí)例:

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

sshd_config配置

另一個(gè)可以用來(lái)配置啟動(dòng)命令的地方sshd配置文件:/etc/ssh/sshd_config。通過(guò)sshd_config的AuthorizedKeysCommand來(lái)配置額外執(zhí)行命令。它設(shè)置執(zhí)行任意程序,并從標(biāo)準(zhǔn)輸出stdout獲取authorized_keys文件。比如可以配置為:

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

上面配置中的格式字符串的作用是為命令提供嘗試登錄的用戶名(%u),用戶的主目錄(%h),正在使用的密鑰類型(%t,例如ssh-rsa)和用base64編碼的公鑰(%k)。這里提供的密鑰可用于識(shí)別用戶,可以將用戶公鑰存儲(chǔ)在數(shù)據(jù)庫(kù)中,通過(guò)應(yīng)用查詢并提供給sshd用于認(rèn)證??梢栽诖颂幥度胱远x的命令行應(yīng)用。

Python交互式SSH實(shí)例

下面是一個(gè)一個(gè)簡(jiǎn)單的的AuthorizedKeysCommand和python實(shí)例:

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

上面腳本中buildrht-shell命令告訴用戶使用ssh builds@buildhost connect 之類的命令進(jìn)行連接,可以使用SSH_ORIGINAL_COMMAND變量來(lái)獲取其命令行:

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

然后是身份驗(yàn)證,檢查其密鑰和連接:

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

 

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

交互式SSH中最重要的是對(duì)的輸入命令進(jìn)行實(shí)時(shí)的反饋。tail程序就是用來(lái)實(shí)現(xiàn)這個(gè)功能構(gòu)建和打印日志給標(biāo)準(zhǔn)輸出:

自定義構(gòu)建交互式SSH應(yīng)用程序,以Python為例

以上我們就構(gòu)建了一個(gè)自定義的個(gè)性化的交互式SSH應(yīng)用實(shí)例。

總結(jié)

本文我們我們介紹了自定義構(gòu)建交互式SSH應(yīng)用的方法,并通過(guò)Python為例實(shí)現(xiàn)了一個(gè)簡(jiǎn)單例子。拋磚引玉,自定義的交互式SSH應(yīng)用在很多情況下都可以用來(lái)作為很有用的工具,比如可不可以對(duì)github的git ssh做一個(gè)擴(kuò)展,把一些功能添加到過(guò)去,而不是簡(jiǎn)單的一個(gè)信息提示:

  1. Hi bollwarm! You've successfully authenticated, but GitHub does not provide shell access 

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2024-07-25 08:58:16

GradioPython數(shù)據(jù)應(yīng)用

2023-09-28 08:29:15

開(kāi)源工具集語(yǔ)音識(shí)別

2013-12-11 10:41:00

jQuery插件

2019-01-03 09:06:55

Node.js命令行工具 前端

2016-11-29 12:25:56

Python大數(shù)據(jù)數(shù)據(jù)可視化

2025-02-25 10:40:00

圖像生成工具模型

2023-10-12 16:37:36

模型學(xué)習(xí)

2023-12-18 15:02:00

PyechartsPython數(shù)據(jù)可視化工具

2023-11-10 14:46:41

OpenAIPinecone

2012-04-18 15:36:33

HTML5Canvas交互式

2023-06-27 13:46:20

2024-06-26 12:17:48

深度學(xué)習(xí)GUI

2011-09-01 15:54:10

app應(yīng)用

2023-04-10 15:08:52

Plotly Das開(kāi)發(fā)Web 應(yīng)用程序

2022-02-17 19:59:10

LED燈開(kāi)發(fā)鴻蒙

2021-10-27 16:03:43

Python編程語(yǔ)言代碼

2024-08-02 10:30:39

StreamlitPython庫(kù)數(shù)據(jù)驅(qū)動(dòng)

2021-11-22 09:00:00

后端開(kāi)發(fā)CMS

2010-02-24 09:39:25

Python交互式

2012-04-26 09:28:39

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)