
私は SCP を使用して、クラウド内の VPS から PC にファイルをバックアップしています。バックアップ スクリプトの初期バージョンには、サーバー ルートからすべてをバックアップする単一の SCP コマンドがあります。これは問題なく動作します。
しかし、サーバーが大きくなるにつれて、これは大きくなり始めているので、特定のディレクトリ (約 12 個) で SCP コマンドを実行するようにスクリプトを変更しています。そして、今では、個々の SCP コマンドの一部が「接続が拒否されました」というメッセージでランダムに失敗します。しかし、スクリプト内の次の SCP コマンドは機能します... どこかで何らかの調整が行われた場合に備えて、各 SCP コマンドの間に 5 秒の遅延を追加しましたが、これでは十分ではありません。
何が原因でしょうか? 何を確認すればよいでしょうか?
netstat
スクリプトの実行後、サーバー上で自分の IP からの複数の SSH 接続が表示されます (もちろん発行する接続も含まれますnetstat
が、これはそのうちの 1 つだけでしょうか)。
問題になる場合、サーバーは Ubuntu Server 16.04 を実行しており、私の PC は Ubuntu 14.04 を実行しています。
答え1
おそらく、VPS プロバイダー (または独自のサーバー) が SSH 接続の速度を制限しています。速度制限を超えると、接続は拒否されます。
[アップデート]
ssh -L 2222:localhost:22 user@vps
この制限が VPS プロバイダー側にある場合は、スクリプトの実行中にサーバーへのssh トンネル (つまり ) を確立し、このトンネル経由でのみ scp を実行する (つまり、localhost:2222
私が指定したトンネル経由で) ことで、この制限を克服できます。