ssh訪問伺服器
❶ 使用 SSH-Key 登錄遠程伺服器
ssh 提供兩種級別的安全認證:
需要知道用戶名和密碼即可登錄,該連接是加凱缺密的,但客戶端不能確認目標主機是否為「偽造的」,也不能保證口令安全。
遠程主機的 /etc/ssh/sshd_config 需配置:
重啟 sshd 使改動生效:
需要用戶持有「公鑰/私鑰對」,慶褲遠程伺服器持有公鑰,本地持有私鑰。
客戶端向伺服器發出請求。伺服器收到請求之後,先在用戶的主目錄下找到該用戶的公鑰,然後對比用戶發送過來的公鑰。如果一致,伺服器用公鑰加密「質詢」並發送給客戶端。客戶端收到「質詢」後用私鑰解密,再發還給伺服器。認證結束。
生成 ssh-key,選加密演算法(rsa、dsa),給秘鑰命名(可選):
passphrase 是證書口令,以加強安全性,避免證書被惡意復制。
會在 ~.ssh 下生成 id_rsa , id_rsa.pub 兩個文件,分譽孫簡別是 私鑰/公鑰。
公鑰需保存到遠程伺服器 ~/.ssh/authorized_keys 里,私鑰由客戶端本地留存。
要保證 .ssh 和 authorized_keys 都只有用戶自己有寫許可權。否則驗證無效。
簡單情況下,通過手動指定私鑰文件登錄
覺得麻煩可以配置客戶端的 /etc/ssh/ssh_config
你也可以使用 SSH Agent,下面以使用 GitHub 為場景簡單介紹。
創建 ~/.ssh/config
配置完成後,在連接非默認賬號的倉庫時,遠端地址要修改為
1、首先連接到Linux主機並進入命令行狀態。
❸ SSH 通過代理連接伺服器
老規矩,先說結論:
或者:
注意:由於 macOS 版 Ncat 的 7.90 和 7.91 版本的 bug,上述方式不再生效。起碼 7.91 版本在 macOS 10.15.7 上是不行的。此問題在 7.92 版本中已經解決。
具體原因參見: https://nmap.org/changelog.html
但 Linux 上沒問題。所以增加個 socat 的替補方案:
Scout 本身很強大,但對代理的支持這部分貌似差一些,只支持 SOCKSv4 和 HTTP Proxy,不灶穗陵支持 SOCKS5。詳情參考 《socat 初窺門徑》 。
有些時候,由於網路限制等原因,不能直接連通過 SSH 連到指定伺服器,需要經過代理進行連接。例如如下場景:
其中,
client.net 不能直接訪問 server.net
client.net 可以訪問 proxy.net
proxy.net 可以訪問 server.net
使用 SSH 的 ProxyCommand 選項,配合 nc/Ncat 命令,實現 client.net 通過代理 proxy.net ,以 SSH 訪問 server.net 。
(1) nc
macOS 上常用這種方案。但是 nc 不支持需要認證的代理。
常用參數:
(2) Ncat
Ncat 在 macOS 上通過代理連接時會出現連接斷開的情況。
常用參數:
以 nc 為例,如使用 Ncat 可以自行替換。
默認為 Socket5 代理,這時可以省略 -X 參數
或者採用另一種寫法:
SSH 配置文件位置:
增加如下兩行內容:以 nc 為例,如使用 Ncat 可以自行替換。
使用配置文件之後,就不需要在命令行中進行代理配置了。
對於大部分情況,都可以直接使用 nc 或者 Ncat 解決。但對於一些復雜情況,也可以通過其它方案完成。如在 macOS 上想通過需要認證的代理連接,用 nc 不支持代理認證, Ncat 又有些問題。
對於代理類型的族前問題,可以通過 Brook 來進行類型轉換。
1、 corkscrew
只支持 HTTP 代理
如需要訪問帶認證的代理伺服器:
~/.ssh/myauth 的內容:
2、 proxytunnel
只支持 HTTP 代理
命令行里只填用戶名,會提示輸入密碼,或者通過環隱戚境變數傳入。
(完)