つまり、コンピューターが起動するたびに、接続が切断された場合にサーバーに再接続する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]
何が悪いのか分かりますか?プログラムを手動で実行すると正常に動作するのに、スタートアップスクリプト内では動作しないのはなぜですか?
自動再接続については、プログラムautosshを確認してください。外部コマンドとそれらのコマンドのフラグを常に指定するため、画面が混乱することはありませんafter画面固有のフラグ。