Ssh-Tunnel

如何使用 dd、netcat 和 ssh 隧道設置磁碟複製?

  • May 10, 2016

我想dd通過 Linux 上的 ssh 加密通道使用 netcat 從主機 A 到 B 批量複製內容(使用重新映像磁碟)。

我應該在兩端輸入什麼命令?

從源複製到目標執行 sshd 的目標:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

當目標未執行 sshd 時,通過 sshd_host 從源複製到目標。

  • 目標: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • 資源: ssh -L 62222:target:62222 sshd_host &
  • 資源: dd if=/dev/sda | nc -w 3 localhost 62222

dd - *if=*是源,*of=*是目標,*bs=是塊大小。不同的塊大小可以提高性能。16 通常是一個相當合理的起點。您還可以使用count=*來指示要複製的塊數。

nc - -p表示用於服務的埠。 -l用於啟動服務。 -w設置退出前等待管道中數據的時間。

ssh - -L在遠端主機上建立隧道。參數的格式是,local_port:target_host:target_port。您的本地程序 (nc) 連接到 local_port,此連接通過隧道連接到 target_host 上的 target_port。

定義的選項只是用於此目的的選項。查看手冊頁以獲取更多詳細資訊。

幾點注意事項:

  1. 如果您通過 LAN 以外的任何設備執行此操作,我建議您使用 gzip 或 compress 壓縮數據流。Bzip2 也可以,但它需要更多的 CPU 時間。第一個有這種用法的例子。
  2. 如果源分區未掛載或以只讀方式掛載,則更好。如果不是,您將需要 fsck 目標圖像。
  3. 除非其中一台機器有 netcat 但沒有 ssh,否則這裡並不需要 netcat。這種情況看起來像:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. 如果源和目標大小相同,則 dd 效果最佳。如果不是,則目標必須是 2 中的較大者。
  2. 如果您使用的是 ext2/3 或 xfs,則轉儲(或 xfsdump)和恢復可能是更好的選擇。它不會處理引導扇區,但是當目標和源大小不同時它可以工作。

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