利用ssh穿越多個跳板機最簡單最高效的辦法

【小宅按】對於雲計算環境下多跳網路拓撲更為常見,一級一級ssh登錄比較低效,拷貝文件更不方便了。本文描述一種方法,可對一個向上生長的樹形跳板拓撲的任意節點,按自定義名字進行簡單/直接/快速的ssh訪問和scp/sftp等文件拷貝。

一般大家知道ssh可以用~/.ssh/{id_rsa, id_rsa.pub, authorized_keys}三個文件進行無密碼登錄遠程ssh server進行命令行下的工作(若拷貝文件可以用scp/sftp)。但是對於雲計算環境下多跳網路拓撲更為常見,一級一級ssh登錄比較低效,拷貝文件更不方便了。本文描述一種方法,可對一個向上生長的樹形跳板拓撲的任意節點,按自定義名字進行簡單/直接/快速的ssh訪問和scp/sftp等文件拷貝。

1. 在每個節點產生公鑰私鑰對

  • ssh-keygen -t rsa 運行此命令產生公鑰私鑰,一路回車可以不設置保護密碼
  • 檢查是否產生了這倆文件 ~/.ssh/id_rsa,~/.ssh/id_rsa.pub
  • 記住這個公鑰私鑰對所屬的用戶名

2. 把本機公鑰放到每一個直連下一跳的~/.ssh/authorized_keys

  • cat ~/.ssh/id_rsa.pub | ssh username@next_jumper cat - >> ~/.ssh/authorized_keys, 此處需要username的密碼
  • 嘗試ssh username@next_jumper 這時不需要密碼應該能登錄
  • 對中間跳板機之間的每個登錄關係做如上驗證

3. 作為訪問起點的client需要額外設置

  • 確保ssh client支持ProxyJump語句(openssh 7.5版本之後,mac mojave和ubuntu 18.04開始)
  • 創建~/.ssh/config文件,描述跳板機的樹形級聯拓撲結構(下面舉例描述兩條路徑client->jumper1->jumper2a->jumper3->node1, client->jumper1->jumper2b->jumper4->node2|192.168.103.0/24, 注意,第一級jumper不帶ProxyJump語句, Port為22也可以預設不寫):

Host jumper1
User <user_of_jumper1>
Hostname <ip_of_jumper1>

Host jumper2a
User <user_of_jumper2a>
Port 2222
Hostname <ip_of_jumper2a>
ProxyJump jumper1

Host jumper2b
User <user_of_jumper2b>
Hostname <ip_of_jumper2b>
ProxyJump jumper1

Host jumper3
User <user_of_jumper3>
Hostname <ip_of_jumper3>
ProxyJump jumper2a

Host jumper4
User <user_of_jumper4>
Hostname <ip_of_jumper4>
ProxyJump jumper2b

Host node1 n1
User <user_of_node1>
Hostname <ip_of_node1>
ProxyJump jumper3

Host node2 n2
User <user_of_node2>
Hostname <ip_of_node2>
ProxyJump jumper4

Host 192.168.103.*
User <username_on_target>
ProxyJump jumper4

  • 參照步驟2把client公鑰放置到每個葉子節點<node1, node2, 192.168.103.*>

4. 驗證如下命令,應可以無密碼執行

ssh node1
ssh n1
ssh node2
ssh n2
ssh 192.168.103.254
scp myfile node1:./
scp n1:./myfile /tmp/
sftp n2
sftp 192.168.103.2

5. client設置ControlMaster高速復用ssh連接

將如下加入到~/.ssh/config文件頂部,第一次ssh登錄之後再次ssh登陸,幾乎沒有無延時。一段時間內重用連接不需要認證過程(對於密碼登陸方式就是不要求輸入密碼了)

Host *
ServerAliveInterval 10
TCPKeepAlive yes
ControlPersist yes
ControlMaster auto
ControlPath ~/.ssh/master_%r_%h_%p

6.增量同步遠程機器的指定目錄

lftp這個老古董可以利用sftp經由ssh的config跳板通道,進行文件拷貝同步等動作。

#把client本地/root/project/下的文件增量同步到遠程n1上的/root/project/
lftp sftp://n1 -e "mirror -R /root/project/"

#把遠端n1上的/root/project/下的文件增量同步到client本地/root/project/
lftp sftp://n1 -e "mirror /root/project/"

# lftp還有多線程參數加速同步或者下載,讀者可自行發掘。

更多精彩內容,請滑至頂部點擊右上角關注小宅哦~


來源:華為雲原創 作者:divfor

推薦閱讀:

TAG:Linux運維 | 雲計算 | 程序員 |