Windows OpenSSH 基本用法

2021-09-09 02:48:36 字數 3647 閱讀 6568

筆者在前文《windows 支援 openssh 了!》中介紹了 windows 對 openssh 支援的基本內容,本文在前文的基礎上介紹一些 openssh server 的配置和常見用法。

之前我們介紹了如何通過 windows 本地使用者的方式登入遠端主機,下面看看如何以 windows  域使用者的方式登入:

> ssh domain\nickli@xa-crab

> ssh nickli@domain@xa-crab

> ssh -l nickli@domain xa-crab

上面的三種方式都可以通過域使用者的身份登入的遠端主機。個人比較喜歡第一種,第三種方式中的 -l 選項用來指定登入者的賬號。

配置域使用者通過公鑰認證登入的方式與本地使用者相同,請參考《windows 支援 openssh 了!》一文。

通過在 openssh 服務的配置檔案中新增 allowgroups、allowusers、denygroups 和 denyusers 指令可以控制哪些使用者和組可以連線到伺服器。這些指令被處理的順序為:denyusers、allowusers、denygroups,最後是 allowgroups。這一點非常重要,如果我們只設定了一條 allowgroups sshusers 記錄,那麼不在 sshusers 組中的使用者將無法登陸。所以我們可以建立乙個使用者組用來包含允許通過 ssh 登陸主機的使用者,並在配置檔案 c:\programdata\ssh\sshd_config 中新增對應的 allowgroups 記錄:

allowgroups sshusers
注意:所有帳戶名稱必須是小寫字母。除了上面的基本用法,我們還可以通更靈活的配置來允許或拒絕符合某些條件的使用者登入主機,下面是些常見的例子:

#

阻止與使用者 contoso\nick 從 10.32.1.68 登入主機

denyusers contoso\[email protected]

#阻止所有 contoso 域中的使用者登入主機

denyusers contoso\*

#只允許 contoso\sshusers 域組中的使用者登入主機

allowgroups contoso\sshusers

#只允許本地使用者 nick 從 10.32.1.68 登入主機

allowusers [email protected]

#只允許本地使用者組 sshusers 中的使用者登入主機

allowgroups sshusers

以前在 windows 之間傳遞檔案事件很讓人抓狂的事情,現在有了 openssh 加持,自然是能夠支援以 scp 的方式在主機間拷貝檔案,再加公鑰認證,完美的支援自動化的檔案拷貝操作。下面是乙個簡單的用 scp 拷貝檔案例子:

> scp d:\grafana.tar.gz nick@xa-crab:c:\testdir
openssh server 預設開啟 sftp 伺服器功能,也就是說我們通過 22 號埠就可以通過 ftp 協議訪問遠端主機,下面是筆者通過 ftp 客戶端工具 filezilla 瀏覽遠端主機檔案系統的截圖:

當然,你也可以使用命令列客戶端 sftp,效果是一樣的。

筆者在《powershell 遠端執行任務》一文中介紹過如何在 windows 平台上遠端執行 powershell 命令,相比通過 openssh 遠端執行命令,powershell 的方式實在是讓人感覺笨拙!讓我們來看看通過 openssh 遠端執行命令是何等的簡練:

第一行命令遠端執行 hostname 命令,結果顯示遠端主機的名稱;第二行命令遠端執行分號分隔的兩條命令,顯示遠端主機的名稱和當前的路徑。

遠端執行本地的指令碼

由於 powershell 中不能把檔案 attach 到 stdin,所以下面的命令不能工作:

> ssh nick@xa-crab < test.sh
但是我們可以採取管道操作獲得類似的結果,在本地使用者 nickli 的家目錄中建立 mytask.ps1 檔案,編輯其內容如下:

echo "

hello world!

"systeminfo > remotetest.txt

在本地執行下面的命令(遠端主機的預設 shell 為 powershell):

檢查遠端主機 xa-crab 上使用者 nick 的家目錄,可以看到 remotetest.txt 檔案被建立,內容為 systeminfo 命令的輸出。這種方法的優點是指令碼中所有命令是在乙個 session 中執行的,這點可以通過下面的方法驗證。在本地使用者 nickli 的家目錄中建立 mytask2.ps1 檔案,編輯其內容如下:

$p = get-process

powershell

$p.virtualmemorysize

在本地執行下面的命令(遠端主機的預設 shell 為 powershell):

上面的輸出表明,指令碼執行的過程中變數的上下文是整個指令碼。

執行遠端主機上的指令碼

在遠端主機 xa-crab 上的使用者 nick 的家目錄中建立 task.ps1 檔案,編輯其內容如下:

echo "

hello nick!

"systeminfo > test.txt

在本地執行下面的命令(遠端主機的預設 shell 為 powershell):

> ssh nick@xa-crab powershell.exe -f task.ps1
檢查遠端主機 xa-crab 上使用者 nick 的家目錄,可以看到 test.txt 檔案被建立,內容為 systeminfo 命令的輸出。

當 windows 支援 openssh 後,我們就能夠用相同的工具在 windows 平台和 linux 平台上工作了,更進一步還可以用 ssh 客戶端跨平台地連線 ssh 伺服器,想想就是一件開心的事情(雖然目前 bug 還很多:))!

參考:

powershell/win32-openssh

openssh in windows

Optimized Purchasing基礎知識

pr的三要素 物料 數量 採購日期 日期是會影響價錢的 blanket po fo框架訂單。a 成本中心,i 限制 專案的限制標籤 miro支票不管數量,從帳戶分配輸入金額。產生pr三種 me51n,me25,mrp 產生po四種 me21n,me25,me57,me59n evo 物料管理 採購 ...

Phabricator Arcanist基本用法

git clone git git clone git 獲取到arcanist的原始碼後,進行相關配置 開啟.bash profile open e bash profile在環境變數中新增 export path path somewhere arcanist bin 命令列中輸入arc命令檢視是...

HttpServletResponse基本功能

request是請求物件,而response是響應物件。response物件的功能分為以下四種 設定響應頭資訊 addheader refresh 5 url x 傳送狀態碼 senderror 404 設定響應正文 getwriter print fdsfdsa 重定向 sendredirect ...