ssh
這個命令算做是學習 Linux 時最基礎的命令之一了。以前使用 ssh 時,都是經過用戶名 + 密碼的形式進行登陸的。以前寫 TransFile-Shell 小工具[[1]](https://gitee.com/lwx19960428...,曾經經過服務端配置客戶端公鑰的方式進行免密登陸,這兩天給朋友解決問題時,接觸到 Jenkins 執行遠程腳本的功能,涉及到了 SSH-Agent 作代理請求的功能,如今把幾種方式都做爲筆記寫下來。html
根據百度百科介紹:SSH 是創建在應用層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用 SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題[[2]](https://baike.baidu.com/item/...。linux
從客戶端來看,SSH 有兩種形式的安全驗證方式:git
口令驗證因沒法保證正在鏈接的服務器就是真正想要的服務器,因此可能存在服務端被冒充(中間人攻擊)的方式。而密鑰驗證則是依賴客戶端服務端之間的公私鑰加解密方式,故不存在中間人攻擊(中間人沒有任何一端的私鑰),但同時整個過程須要相對較長的時間。shell
具體的 ssh 相關資料可參照後續的參考連接進行了解。segmentfault
進行下述實驗步驟前,請確認服務器已開啓 SSH 服務,且相關端口的網絡策略已經開通。安全
角色 | 主機名 | IP 地址 | 系統 |
---|---|---|---|
客戶機 A | local-vmware-01 | 192.168.36.129 | CentOS 7.4 |
客戶機 B | local-vmware-03 | 192.168.36.133 | CentOS 7.4 |
服務機 | local-vmware-02 | 192.168.36.132 | Ubuntu 18.04 LTS |
未配置公私鑰對時,客戶機 A 經過 SSH 登錄時,登錄提示須要密碼。bash
ssh dcos@192.168.36.132
爲了免密,一路回車,生成 SSH 要用的公私鑰對,此步驟在客戶機 A 執行。根據提示,生成出來的公私鑰文件位於 ~/.ssh
目錄下,其中 id_rsa
爲私鑰,id_rsa.pub
爲公鑰。服務器
ssh-keygen -t rsa
將客戶機 A 的公鑰內容複製出來,粘貼至服務機的 ~/.ssh/authorized_keys
文件中。網絡
# local-vmware-01 上執行 cat ~/.ssh/id_rsa.pub # local-vmware-02 上執行 # 若是不存在 ~/.ssh 此目錄,則須要先行手動建立,建立完注意同時賦權 700 mkdir ~/.ssh && chmod 700 ~/.ssh # 文件不存在,則 Vim 將自動建立該文件;如已存在,注意與以前記錄間增長換行 vi ~/.ssh/authorized_keys # 同時,此文件須要賦權 600 權限,不容許其餘用戶修改 chmod 600 ~/.ssh/authorized_keys
再次經過 SSH 登陸,再也不須要密碼便可從新登陸,使用 scp
命令等也是同樣,再也不須要輸入密碼。至此,經過添加客戶機公鑰信任來實現免密登陸已經完成。ssh
上述方式能夠很方便的經過公私鑰的配置進行 SSH 的免密登陸,但當咱們沒法拿到客戶機的公鑰時,就須要經過 ssh-agent
進行代理登陸。
什麼都不作配置,在客戶機 B 上經過 SSH 訪問,提示須要輸入密碼。
由於客戶機 A 已配置好了公鑰信任,接下來咱們將在客戶機 B 上經過 ssh-agent 的形式來進行代理登陸。
將客戶機 A 的 id_rsa
私鑰文件上傳到客戶機 B 中,同時設置其權限爲 600,以上傳到家目錄爲例。
# local-vmware-03 上執行 chmod 600 ~/id_rsa
經過以下命令啓動 ssh-agent 服務、增長身份密鑰、登陸認證等步驟,可不用密碼登錄服務機。
# 啓動ssh-agent服務 ssh-agent # 啓動ssh-agent bash服務 ssh-agent bash --login -i # 增長私鑰文件 ssh-add ~/id_rsa # 從新SSH進行登陸,再也不須要輸入密碼 ssh dcos@192.168.36.132
以前的 ssh 命令登陸至關因而增長了默認的 -i ~/.ssh/id_rsa
參數,當一臺 Linux 機器生成了多個 ssh 密鑰時,就須要經過 -i 參數的形式來指定使用哪一個私鑰文件參與到 ssh 鏈接的過程。同理,這種形式則是至關於自定義了 id_rsa 文件的位置,並未有太大的亮點。
# local-vmware-03 上執行 ssh -i ~/id_rsa dcos@192.168.36.132
在 Jenkins 中配置 ssh-agent 時,每一步都配置的沒有問題,直接在 Jenkins 服務器上用 ssh-agent 工具也能夠登陸,可是每次構建時都提示 Host key verification failed.
的報錯。
通過分析,得出結論,是因爲第一次登陸時須要輸入 yes / no 致使的認證失敗。要想解決此問題,可經過在鏈接命令上增長 -o "StrictHostKeyChecking no"
來解決此問題[[3]](https://blog.csdn.net/ITzhang...。
ssh -o "StrictHostKeyChecking no" dcos@192.168.36.132
經過上述幾種免密登陸方式的配置,咱們能夠 Get 到如下幾個知識點:
[1] https://gitee.com/lwx19960428...
[2] https://baike.baidu.com/item/...