web-dev-qa-db-ja.com

LinuxからWindowsにファイルをコピーしようとするとscpがスタックする

Linux red-hat 5からWindowsマシン(Tempディレクトリの下)にファイルの割り当てを転送するために、次のscp構文を使用します。

備考:

  • SSHサーバーはすでにWindowsマシンにインストールされています
  • シェルスクリプトでこの行を使用します

     sshpass -p '$password'  /usr/bin/scp -o StrictHostKeyChecking=no  $FILE [email protected]:'D:/Temp'
    

ほとんどの場合、ファイルは正常に転送されました

しかし、ファイル転送中にscpがスタックすることがありますか? 、pingなどのように接続は問題ありませんが

そして私はscpから次のエラーを受け取ります(久しぶりに)

   ssh_exchange_identification: read: Connection reset by peer
  1. なぜscpは安定しておらず、動かなくなっているのですか? 、そしてこの問題の解決策は何ですか?
  2. Scpのその他の良い代替手段は何ですか? 、(100%の安定性が必要だと考えてください)
2
Eytan

これはネットワークの問題の兆候である可能性があります-pingはすべての問題をキャッチするわけではありません。最も可能性の高い原因は、ファイアウォールまたは接続を切断しているNATデバイスです。

詳細出力用の-vをscpに追加すると、それが何をしているのかについてより詳細になり、何が起こっているのかについてより良い手がかりが得られる可能性があります。失敗した転送の出力を-vオプションで投稿したい場合は、より正確な答えを出すことができるかもしれません。

ピアによる接続のリセットとは、宛先サーバーが接続をリセット/閉じたことを正確に意味します。 NATデバイスは、しばらくの間データが送信されていない場合、またはデバイスが正しく機能していない場合にこれを実行します。

一部のISPは、ピアツーピアトラフィックを制限するトラフィックシェーピングの形式としてこれを実行します。残念ながら、SSH接続にも適用するISPもあります。これはビジネス接続では問題にならない可能性がありますが、どちらかの端に住宅用インターネット接続がある場合は、それが適用される可能性があります。

Windows上のSSHサーバーも不安定である可能性があります。どちらを使用するかは指定しませんが、すべてが確実に機能するわけではありません。

奇妙な実例の1つに、同様の問題を抱えている友人がいました。ケーブルモデムのファームウェアにバグがあり、数百万パケットごとに1つが破損していることが判明しました。小さな転送が完全に機能するほどまれですが、大きな転送は毎回死にます。

または、通常のインターネットの問題である可能性があります。インターネットは100%信頼できるわけではなく、決して信頼できるものではありません。接続が失敗することもあれば、途中でパケットが失われることもあります。イーサネットケーブル内の小さな男性がストライキを行い、パケットを運びたくない場合があります。したがって、それを処理できるツールが必要であり、成功するまで再試行を続けます。

ここでは、再開できるという理由だけで、rsyncの方が適しています。 このブログ投稿 scpの代わりに再開してrsyncを設定する方法を説明しています。必要に応じて、単純なシェルスクリプトを記述して、rsyncの終了コードを確認し、失敗した場合は再試行を続けることができます。 この他のブログ投稿 そのようなスクリプトの例があります。

2
Grant

Scpのその他の良い代替手段は何ですか? 、(100%の安定性が必要だと考えてください)

それを裏返し、WindowsマシンからWinSCPを使用して、Linuxサーバー上のファイルに接続して取得することを検討してください。

2
TheCleaner

Eytan、Windowsマシンに他のツールをインストールできるかどうか、暗号化された接続が必要かどうかについては言及していません。ここに私のコメントと提案があります。

  • 今日、私はrsyncに問題があり、ファイルがたくさんある大きなツリー構造をコピーします...クラッシュするだけですが、もう一度実行すると、前に停止した場所から「続行」します。
  • rsyncにはsshまたはrshユーティリティが必要です...問題がrsyncを備えたsshサーバーであると仮定すると、新しい障害点が作成されます。しかし、個人的には、このソリューションは用途が広いので、破棄する前にテストします。

私の提案

  • 私はあなたのニーズのようなソリューションに cygwin を使用した素晴らしい経験があります。
    したがって、基本パッケージをインストールし、ssh + cygrunsrvを開きます(Windowsサービスを作成するため)。
  • 次に、ソリューションの書き換えを回避するために、Windowsや使用している他のsshサーバーの代わりにcygwinsshサーバーを使用してみてください。
  • または、rsh-serverをインストールして、rsyncで試すこともできます。
  • 他のオプションはFTPサーバー(proftpdまたはpureftpd)であり、Linuxでncftp/ ncftpputを使用してWindowsに接続します。
    ncftpは、既存の/古いファイルを識別し、それを上書きするかどうか、および再帰ディレクトリを決定できます。あなたはおそらくあなたのRedHatDVDにncftpRPMを見つけることができます。
    パフォーマンスを考えると、FTPが最適です。

ご覧のとおり、私はcygwinが好きです。これは、Windowsで何度も役立ちます...そして、Windowsデスクトップの「必須」ツールです。

幸運を。

0
ceinmart