baicai

白菜

一个勤奋的代码搬运工!

SSH使用ProxyCommand通過代理伺服器遠程連接其他伺服器

OpenSSH 的客戶端有一個 ProxyCommand 的選項,用於 SSH 客戶端與伺服器之間的隧道通訊 (tunneling)。所謂的隧道技術,也稱代理技術,是網路通訊技術的一個普遍概念,就是把一條信道建立於另外一條信道之上。

SSH 會話基於一個 TCP 連接,如果我們把連接的兩個端口各自的出口(也即入口)進行截獲,就可以用其它的信道來傳輸。而且 SSH 仍然認為它用的是和另一端連接一條 TCP 連接。

ProxyCommand 指定一個命令(稱為 Proxy),SSH 客戶端將通過標準輸入輸出和這個命令啟動後的進程進行正常的 SSH 通訊,而 Proxy 連接著 SSH 伺服器(一般是一個 Server Proxy,再由該 Server Proxy 連接伺服器)。

環境說明

    遠端伺服器的IP地址為0.0.0.1,代號為X;
    另一個遠端伺服器的IP為0.0.0.2,代號為Y;
    目前本機的IP地址為0.0.0.3,代號為A,本地可以利用SSH客戶端通過密鑰或密碼連接X和Y;

這裡全部使用密鑰的方式進行訪問,本機 A 與 Y 之間無法進行訪問

本地的
~/.ssh/config
的配置檔案資訊如下,通過 X 連接到 Y;

Host X
        HostName 0.0.0.1
        User root
        Port 22
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_1
Host Y
        HostName 0.0.0.2
        User root
        Port 22
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_2
Host test
    HostName 0.0.0.2
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa_2
    ProxyCommand ssh X -W %h:%p

測試本機通過 X 連接到 Y 伺服器

ssh test

附註:

-W host:port
             請求將客戶端的標準輸入和輸出通過安全通道轉發到主機的端口。意味著-N,-T,ExitOnForwardFailure和ClearAllForwardings,儘管這些可以在配置檔案或使用-o命令行選項中被覆蓋。

-W:該參數在OpenSSH 5.4及之後的版本才支援,參考官方的Release資訊;
在使用-W之前,通常都是使用nc選項,nc允許你轉發TCP/UDP數據包到指定(備用)位置並且基本上與ssh -W相同;

參考:
openssh

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。