web-dev-qa-db-ja.com

自動再接続によるSSHポート転送、起動時に実行されるスクリプト

つまり、コンピューターが起動するたびに、接続が切断された場合にサーバーに再接続するsshポート転送接続を開始したいと思います。コンピューターはDebianWheezyx64です。

最初の正常な接続は、次のように行うことができます。

screen -dmS autossh autossh -M 29000 -N -v -p 22 -l user -i /path/to/.ssh/id_rsa -L port:my-computer:port my-server.com

起動時にこれを実行するにはどうすればよいですか? (できればrootではなくユーザーによる)。現在、起動時にプログラムを開始する方法は次のとおりです。

rc.localは、起動スクリプトを次のように呼び出します。

su -c "/home/username/scripts/startup" username

現在、/ home/username/scripts/startupには次のものが含まれています。

screen -dmS program1 python my-python-program
screen -dmS program2 python my-python-program2
screen -dmS autossh autossh -M 29000 -N -v -p 22 -l user -i /path/to/.ssh/id_rsa -L port:my-computer:port my-server.com

起動すると、3つのプログラムすべてが実行されているように見えます(リスト画面-lsによる)。 program1またはprogram2に問題はありません。ただし、autosshは実際にはポートを転送していません。

私が実行した接続の成功と、起動時に実行された接続の失敗の違いは、接続の成功には次の行があることです。

debug1: channel 4: free: direct-tcpip: listening port 8082 for 192.168.1.104 port 80, connect from ::1 port 59681, 
nchannels 5

失敗した接続は次のように試行し続けます。

debug1: Connection to port 8082 forwarding to 192.168.1.104 port 80 requested.
debug1: channel 4: new [direct-tcpip]
debug1: Connection to port 8082 forwarding to 192.168.1.104 port 80 requested.
debug1: channel 5: new [direct-tcpip]
debug1: Connection to port 8082 forwarding to 192.168.1.104 port 80 requested.
debug1: channel 6: new [direct-tcpip]
debug1: Connection to port 8082 forwarding to 192.168.1.104 port 80 requested.
debug1: channel 7: new [direct-tcpip]
debug1: Connection to port 8082 forwarding to 192.168.1.104 port 80 requested.
debug1: channel 8: new [direct-tcpip]

何が悪いのか分かりますか?プログラムを手動で実行すると正常に動作するのに、スタートアップスクリプト内では動作しないのはなぜですか?

4
Oddworld

自動再接続については、プログラムautosshを確認してください。外部コマンドとそれらのコマンドのフラグを常に指定するため、画面が混乱することはありませんafter画面固有のフラグ。

3
ggustafsson