🐱

2段階トンネルを利用したrsyncによるファイルコピー方法

2024/05/27に公開

例えば、以下のように2段階でsshする場合を考えます。ここではユーザーネームをcatとしています。

  • 1段目: ssh -i $HOME/.ssh/ed25519_raspi cat@98.160.110.52
  • 2段目(host): ssh -i $HOME/.ssh/ed25519_ubuntu cat@192.168.1.205

構成としては次のようになります。

  • client: 自分のPC。MacやWindowsなど何らかのローカルデバイス
  • トンネル用デバイス: ラズベリーパイ
  • host: コピーしたいファイルがあるサーバー

このような場合には、SSH ProxyJumpを活用したrsyncによるマルチホップファイル転送をすることで、一気にclientからトンネル用デバイスを通してhostにアクセスし、hostのファイルをclientにコピーすることができます。
まず~/.ssh/configを以下のように書きます。

# ~/.ssh/config
Host jumpserver
    HostName 98.160.110.52
    User cat
    IdentityFile ~/.ssh/ed25519_raspi

Host finalserver
    HostName 192.168.1.205
    User cat
    ProxyJump jumpserver
    IdentityFile ~/.ssh/ed25519_ubuntu

そして、以下のようなコマンドを実行することでファイルをコピーできると思います。

rsync -av -e "ssh" cat@finalserver:/home/cat/Work/dog /home/cat/Downloads/

もしまだエラーが出る場合は、ssh周りの設定を見直しましょう。例えば典型的なのは、ssh keyファイルのパーミッションが間違えているケースです。もしそれが原因の場合、以下の3つのコマンドを実行すれば解決するはずです。ssh keyファイルのファイル名は適宜ご自分のファイル名に変更してください。

sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/ed25519_raspi
sudo chmod 600 ~/.ssh/ed25519_ubuntu

Discussion