基於ssh反向代理實現的遠程協助


本文描述了怎么通過ssh反向代理實現遠程協助,並提供了相關代碼。

可滿足web開啟遠程協助功能后,維護人員能夠通過ssh和http登錄客戶機器(包括在nat環境下)

  • web開啟該功能后,ssh才能登錄;
  • 通過標識能夠區分不同的機器;
  • 能夠穿nat;

操作系統: CentOS 6.5_x64

開發語言: Python

源碼地址: https://github.com/mike-zhang/remoteHelper

整體結構如下:

主要成員如下:

  • 客戶A

    購買公司產品的客戶服務器

  • 服務器B

    公司公網服務器

  • 技術支持人員C

    公司員工電腦

端口代理

通過ssh反向代理實現端口轉發,這里描述下思路。

SSH端口代理

HTTP端口代理

密鑰管理

RSA密鑰管理

密鑰用途:客戶機器使用RSA key執行ssh反向代理本地端口

  • 私鑰管理

    私鑰產生位置:客戶機器
    私鑰存儲位置:客戶機器

    私鑰在客戶機保存,新生成密鑰對時執行覆蓋操作。

  • 公鑰管理
    公鑰產生位置:客戶機器
    公鑰存儲位置:公網服務器

公鑰添加過程如下:
1、 公網服務器收到客戶機發來的含RSA公鑰的消息;
2、 從消息中取出客戶序列號;
3、 驗證客戶序列號是否合法;
4、 如果序列號合法,將RSA公鑰加入authorized_keys文件,並在公鑰字符串后面加入超時信息;

公鑰刪除過程如下:
1、從authorized_keys文件取出公鑰;
2、判斷公鑰是否超時;
3、刪除超時的公鑰;

DSA密鑰管理

密鑰用途:
使用此密鑰通過跳板機連接到NAT后面的客戶機。

  • 私鑰管理
    私鑰產生位置:support機器
    私鑰存儲位置:support機器

  • 公鑰管理
    公鑰產生位置:客戶機器
    公鑰存儲位置:客戶機器

私鑰產生過程:
1、獲取客戶機頁面顯示的動態密碼; 2、以動態密碼為seed產生DSA私鑰(存儲后用於ssh登錄客戶機);

公鑰添加過程如下:
1、隨機產生動態密碼;
2、以動態密碼為seed產生DSA公鑰;
3、將產生的DSA公鑰加入authorized_keys文件(不能在key字符串前面加入command命令,否則無法執行command),並設置超時時間;

公鑰刪除過程:
1、從authorized_keys文件取出公鑰;
2、判斷公鑰是否超時;
3、刪除超時的公鑰;

連接管理

IP地址限制

適用范圍:在公網服務器上配置,用於控制support機器ip地址來源。

提供配置項,用於記錄允許的IP地址;
新的請求到來時,驗證下原地址是否合法,如果不是合法地址,直接斷開連接;

SSH連接管理

  • 客戶側ssh連接管理
    ssh命令允許在末尾執行command,當command執行完成時,ssh斷開。
    可借助這個特性在ssh命令的末尾調用python腳本,調用一個python程序,執行sleep操作,python程序退出時ssh連接斷開。

  • Support側ssh連接管理
    如果客戶側的ssh斷開,support側的ssh連接也會斷開,support側的ssh連接可以不用過多管理,僅需在客戶機的authorized_keys進行連接時長的限制。

其它

1、通過命令執行SSH反向代理時,服務端只能通過127.0.0.1

該問題可以通過服務端配置實現ssh監聽0.0.0.0,具體配置如下:

GatewayPorts yes

2、公網服務器remote賬號相關命令

useradd remote
chgrp remote /root
su remote
ssh-keygen -t rsa
cd .ssh/    
touch authorized_keys
chmod 600 authorized_keys

 

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/20170205_基於ssh反向代理實現的遠程協助.md

歡迎補充 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM