🐱
2段階トンネルを利用したrsyncによるファイルコピー方法
例えば、以下のように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