2017-05-02 16 views
0

自分のLinuxコンピュータに自動的にサーバーへのsshトンネルを作成させたい。 鍵を作成しました。手で接続するとすべて正常に動作します。自動sshとスーパーバイザーとの接続

ここで私は、クライアントコンピュータ上でsupervisor.confにしようとしたものを:

[program:mycommand] 
command=autossh -f -nNT -i /home/<myuser>/.ssh/id_rsa -R 20001:localhost:22 [email protected]<myserver_ip_address> 
user=<myuser> 

または

[program: mycommand] 
command=ssh -i /home/<myuser>/.ssh/id_rsa -R 20001:localhost:22 [email protected]<myserver_ip_address> 
user=<myuser> 
autostart=true 
autorestart=true 
stopsignal=KILL 

それは両方の場合に動作しますが、時々、私は(両方の場合)コネクションを失いました。私はserveurまたはクライアントコンピュータを再起動する必要があります。 私のsshトンネルがダウンしていることを検出してコマンドを再起動するにはどうすればよいですか?

おかげ

+0

[これ](http://stackoverflow.com/a/26470428/1072112 sshとの関係を改善するためのヒントを提供するかもしれません。 – ghoti

答えて

0

変更コマンドに:

command=autossh -M 0 -NT -i /home/<myuser>/.ssh/id_rsa -R 20001:localhost:22 [email protected]<myserver_ip_address> 

追加-M 0-f-nを削除しました。

これにより、サーバー接続がタイムアウトするとsshが再起動されます。

タイムアウトのチェック間隔は、例えば、/etc/ssh/ssh_configServerAliveIntervalServerAliveCountMaxクライアント・オプションによって構成されている:

/etc/ssh/ssh_config

Host * 
    StrictHostKeyChecking no 
    UserKnownHostsFile=/dev/null 
    ServerAliveInterval 60 
    ServerAliveCountMax 5 
+0

まったく同じです。クライアントコンピュータで複数のautosshプロセスが表示されます。これは正常ですか?ありがとう – Bob5421

+0

編集した回答があります。上記のコマンドは私が似たような目的のために使っているコマンドです。 autosshコマンドごとにクライアント上に2つのautosshプロセスが存在するのは普通です。それがうまくいかない場合は、上記のssh_config設定を調整する必要があります。 autosshのmanページから、 '-f'は' -M 0'を意味するので、2つは等価でなければなりません。 – danny

+0

それは約1時間働いてから何もしません。私はスーパーバイザーログでこのエラーを見ることができます:Warning:リスンポート:20001でリモートポートフォワーディングが失敗しました。実際には、connexionがダウンしていても20001ポートを保持するゾンビプロセスがないかと思います。新しいプロセスがsshを再び起動しようとすると、20001ポートは利用できません。 – Bob5421