ssh 複用連接

問題

1.在生產環境下面,如果存在較多的ssh連接,無論是人連接上去的還是代碼建立的連接,都會消耗宿主機上面的資源。會造成宿主機的卡頓,IO增大。
2.頻繁地建立ssh連接,需要不停地輸入密碼。

目的

我們需要把大量的連接數降低到一個合理的範圍內。

解決方案

  1. 複用連接

這個方案可以第一步解決這種問題,具體的命令:

ssh -o ControlPath=/home/$user/.ssh/$local_path/%L-%h:%p -o ControlMaster=yes -o ControlPersist=yes $user_name@$host_name

上面的命令裏面的local_path 可以隨便創建,只是方便管理而已
ControlMaster 和 ControlPersist 這兩個參數必須加上,如果不加上的話,不會創建unix socket來監聽本地ssh連接。

這個的原理我感覺應該是

這個創建的unix socket 當代理,ControlMaster這個進程擁有這個unix socket,之後所有想要複用這個ssh連接,都會跟unix socket連接,然後unix socket 再把信息發到真正的ssh 連接。

  1. 設置MaxStartups
    這個變量是在
/etc/ssh/sshd_config

文件裏面,用冒號分割了三個數字,含義如下:

第一個數字:可以同時存在的沒有授權的ssh連接數
第二個數字:如果同時存在的沒有授權的ssh連接數超過了第一個數字,那麼後面沒有授權的ssh登錄請求有 (第二個數字/100)%的機率拒絕掉。
第三個數字:如果同時存在的沒有授權的ssh連接數到達了這個數字,那麼後面所有沒有授權的ssh登錄請求都會被拒絕掉。

遇到的問題

  1. 遇到過unix socket name too long這種錯誤,這個是ControlPath裏面的unix socket 名字太長了,在儘量保證unix socket name 唯一性的前提下,最好儘量縮短unix socket name,限制不太清楚,好像是104-108char
  2. 如果想複用連接,後面的連接必須要指定ControlPath才能使用原來的連接。
  3. MaxStartUps這個變量,man裏面說的是沒有授權,現在還不太理解沒有授權是什麼概念。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章