![既存の SSH チェーン上で SCP を使用する? 可能ですか?](https://rvso.com/image/1552376/%E6%97%A2%E5%AD%98%E3%81%AE%20SSH%20%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E4%B8%8A%E3%81%A7%20SCP%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%3F%20%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
SCP はファイルをコピーするときに新しい接続を確立しますが、ファイアウォールが関係している場合は困難になることがあります。
例えば、
ホストA <--> ホストB <--> ホストC <--> ホストD
- ホスト A は SSH 経由でホスト B に接続され、次にホスト B は SSH 経由でホスト C に接続され、次にホスト D に接続されます。
- ホスト A はホスト B 以外のコンピュータに接続できず、ホスト B はホスト A とホスト C にのみ接続でき、ホスト C はホスト B とホスト D にのみ接続でき、最後にホスト D はホスト C にのみ接続できます。
コマンド(ホストD上)scp /home/user/file ホストA:/home/user/newfile2 つの間に新しい SSH トンネルを作成しようとしますが、これは私が望んでいることではありません。既存の SSH トンネル チェーンを使用して、ファイルを前のホストを経由して Host-A に到達するまでコピーし直す必要があります。
これどうやってするの?
答え1
既存の接続を再利用できます。コマンドラインスイッチ-M
または(クライアント)設定オプションを使用しますControlMaster
。この答え詳細については、StackOverflow をご覧ください。
私はこれを頻繁に使用しており、ControlPersist
遅延後にのみ接続を閉じるためにこれと組み合わせて使用しています。これにより、通常発生する接続時間が回避され、複数回接続を閉じて再接続する場合 (インタラクティブな使用中によく行う) のパフォーマンスが大幅に向上します。
ただし、一部のホスト (GitHub など) への接続ではうまく機能しないので、このオプションをデフォルトとして設定する場合は、特定のホストがこのオプションを使用しないように明示的に除外する必要がある場合があります。