SSH、socat、および私が作成した他のユーティリティを使用して、ローカルコンピュータに接続されているコンピュータと通信しようとしています。
私がやっているソースマシンから:
ssh root@localhost -p 2004 'socat -u TCP-LISTEN:5000 OPEN:foo.test,creat'
(質問に関係なく、現在実行中のユーティリティを使用して4000を5000にマップします。)次に、次の手順を実行します。
socat -d -d TCP:localhost:4000 ./some_file
ファイル転送が正しく発生します。問題は、この種のタスクを連続してすばやく実行する必要があり、初期socat TCP-LISTEN
サーバー設定が完全に終了しないことです。ポートが消えるまで待たなければならないからです。それ以外の場合は、次のエラーが発生します。 :
2016/05/14 11:56:01 socat[655] E bind(3, {LEN=0 AF=2 0.0.0.0:5000}, 16): Address already in use
どのコンセントでもきれいに掃除できるsocatオプションはありませんか?デフォルトでは、ファイル転送にはこれが必要です。リモートシステムを一度だけ閉じるにはsocatが必要です。
ssh
編集:ファイルパスが毎回異なるため、わざと使用しなければならずOPEN
、一つずつすばやく行う必要がありました。
答え1
に変更できますが、TCP-LISTEN:5000
問題TCP-LISTEN:5000,reuseaddr
は、たとえばテスト中に中断が発生したため、リモートでsocatが停止していない可能性がありssh
ますControl-C。
socat
単に要求しfork
、同じ操作をやり直すために新しい接続を再受信すると、起動の繰り返しを回避できます。
socat -u TCP-LISTEN:5000,reuseaddr,fork OPEN:foo.test,creat