Linux

通過 SSH 隧道在多個躍點上複製數據

  • September 23, 2020

我們有兩個主要的環境問題:

開發和質量保證

每個環境有兩台伺服器:

  • 跳箱
  • 應用伺服器

為了連接到應用伺服器,您必須先連接到跳轉框,然後通過 SSH 連接到應用伺服器。

防火牆提供了一些規則:

  • 您必須通過跳轉框連接到應用程序伺服器
  • 應用伺服器無法連接到任一跳轉框
  • 跳轉盒在同一個子網上,並且可以相互通信。

我們的問題

我們在 上有很多內容(670 GB)DEVELOPMENT APPLICATION SERVER,我們需要將這些內容放到QA APPLICATION SERVER.

將此數據複製到跳轉框不是一種選擇,因為它們缺少所需的空間量。

我做了一些研究,了解到我們可以通過這些伺服器建立一系列隧道,這樣我們就可以通過隧道將數據從一個應用伺服器直接流式傳輸到另一個。但是,我們無法從應用伺服器連接到跳轉框的問題。

我們有什麼選擇嗎?這是一個絕望的情況,時間至關重要。我們沒有時間下載數據並重新上傳。在伺服器上通過網路進行複制會很快,因為它是千兆連接。

到目前為止,最簡單的方法是通過 scp 複製它。另外,這種語法實際上與其他一些建議不同。

您無法輕鬆擊敗這種語法。它允許您遞歸地複制、rsync 或任何您想要的東西,而無需考慮潛在的複雜管道。這種語法直覺清晰,更容易被跟隨您的系統管理員支持,並且不會無用地使用 cat

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

scp 手冊頁-3兩個遠端主機之間的副本通過本地主機傳輸。如果沒有此選項,數據將直接在兩個遠端主機之間複製。請注意,此選項會禁用進度表。

在下面的例子中

  • 您的工作站名為 MacBook-Pro。

  • Dev Jump Box 被命名為 devjumpserver

  • 開發應用伺服器名為 devapplicationserver

    • 位於名為 .local 的 LAN DNS 區域
  • QA Jump Box 被命名為 qajumpserver

  • QA 應用伺服器被命名為 qaapplicationserver

    • 位於名為 .local 的 LAN DNZ 區域
  • 我們將執行 670GB /etc/hosts 文件的測試副本;-)

  • 假設您已配置 SSH 公鑰身份驗證。

這是一個 ~/.ssh/config 文件,它通過適當的跳轉(又名堡壘伺服器)設置從工作站到應用程序伺服器的直接訪問。

MacBook-Pro:~ barrychapman$ **cat ~/.ssh/config**
主持人 *
ServerAliveInterval 60
主機 devapplicationsever
主機名 devapplicationserver.local
ProxyCommand ssh -i ~/.ssh/id_rsa barrychapman@devjumpserver.example.com -W%​​​h:%p
使用者 barrychapman
主機 qaapplicationserver
主機名 qaapplicationserver.local
ProxyCommand ssh -i ~/.ssh/id_rsa barrychapman@qajumpserver.example.com -W%​​​h:%p
使用者 barrychapman

MacBook-Pro:~ barrychapman$

測試目標伺服器上是否存在文件,它不會存在。

MacBook-Pro:~ barrychapman$ **ssh qaapplicationserver ls /tmp/hosts**
ls: 無法訪問 /tmp/hosts: 沒有這樣的文件或目錄
被信號 1 殺死。
MacBook-Pro:~ barrychapman$

現在讓我們通過您的工作站將文件從 Dev Application 伺服器複製到 QA Application。


MacBook-Pro:~ barrychapman$ **scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/**
被信號 1 殺死。
被信號 1 殺死。
MacBook-Pro:~ barrychapman$

現在讓我們檢查 QA Application Server 上是否存在複製的文件。這次會在那裡。

MacBook-Pro:~ barrychapman$ **ssh qaapplicationserver ls /tmp/hosts**
/tmp/主機
被信號 1 殺死。
MacBook-Pro:~ barrychapman$

筆記

關閉 ProxyCommand 連接時,您將看到警告消息“被信號 1 殺死”。這是 SSH 斷開 ProxyCommand 連接,無需擔心。LogLevel Quiet您可以通過添加到堡壘主機配置節來擺脫它。

引用自:https://serverfault.com/questions/560970