私はこの質問の下部に起動スクリプトを書いて、私のデバイスの1つがVPSの起動時に複数のリモート転送ポートを自動的に生成するようにしました。 (フォーカスを維持するためにLSBラベルを削除しましたが有効です。)スクリプトを実行してもエラーは発生しません。 autosshプロセスを作成しますが、VPSへの接続を確立しません。 (クライアントはDebian Wheezyを実行しているRaspberry Piで、VPSはUbuntu Server 14.10です。)ssh
個別に使用されるコマンドするうまくいきますが、なぜ起動スクリプトが機能しないのかわかりません。私が気づいたことの1つは、(以下を見ると)-f
スクリプトを使用するとフラグがプロセスから完全に削除されますが、ssh
.PuTTYを呼び出すと、-f
残りのテキストとは異なり、緑色でフラグが立てられることです。なぜこれが起こるのか、問題に関連しているのか教えてはいけません。 (注:すべてのポート番号が変更されましたが、まだ互いに正しく接続されています。)
私の公開鍵は正確で、リモートホストはにありますknown_hosts
。パラメータをエスケープしてエスケープしようとしませんでしたが、違いはなく、フラグの周りに引用符をエスケープ/使用しても違いはありません。user
root
-o
-f
修正する:ssh exited with error status 255; restarting ssh
ssh(autosshではない)などの個々のコマンドを実行しても、syslogにはすべてのautossh行が表示されます。このエラーは、スクリプトが実行されているか、スクリプトの行が bash で直接実行されているかに関係なく返されます。
スクリプトの関連部分init.d
:
case "$1" in
start)
echo "Creating SSH tunnels"
autossh -M 0 -f -N -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
#same command repeated twice more, everything exactly the same but with different ports
;;
stop)
echo "Stopping SSH tunnels..."
ps axf | grep autossh | grep -v grep | awk '{print "kill -9 " $1}' | sh
;;
*)
echo "Usage: /etc/init.d/autossh-gen.sh {start|stop}"
exit 1
;;
esac
ps aux | grep autossh
実行すると3行が生成されますが、簡潔にするためにここに1つだけ入れます。リモートサーバーへの実際の接続は確立されません。ポートは閉じたままです。-f
スクリプトのコマンドが存在しません。
root 14137 0.0 0.1 1700 976 ? Ss 01:37 0:00 /usr/lib/autossh/autossh -M 0 -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
このsshコマンドを実行すると...
ssh -f -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
...これがps aux
ポートに出力されます。はい正常に配信されました。
root 14124 0.0 0.1 5728 1720 ? Ss 01:31 0:00 ssh -f -N -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
答え1
ssh exited with error status 255
通常、認証または接続の問題を示します。オプションautossh
なしでコマンドを実行すると、-f
出力を表示できます。
autossh -M 0 -N -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
autossh
マニュアルを超えて:
-f
autosshを使用することとsshを使用することには重要な違いがあります-f
。autossh
sshはパスワードやパスフレーズを求めません。。
-v
デバッグに役立つ転送または-vv
オプションを試すこともできますssh
。
autossh -M 0 -N -vv -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
また、この/usr/lib/autossh/autossh
プロセスはセッションを監視し、ssh
必要に応じて再起動します。コマンドが機能したら、以下を表示してautossh
処理できる必要があります。autossh
ssh
$ps -eo user,pid,args | grep ssh
----------
someuser 16384 /usr/lib/autossh/autossh -M 33332 -N -R 11111:127.0.0.1:22222 serverip
someuser 16385 /usr/bin/ssh -L 33332:127.0.0.1:33332 -R 33332:127.0.0.1:33333 -N -R 11111:127.0.0.1:22222 serverip
-f
しかし、そのオプションをに渡す必要はありませんssh
。autossh
デフォルトではバックグラウンドで実行されます。
答え2
初期化スクリプトは、手動で試したときとは異なるユーザーコンテキストで実行できます。 initスクリプトが別のユーザーIDで実行されている場合は、秘密鍵ファイルを正しく読み取ることができることを確認してください。
重要なファイルとその権限に既知の構成の問題があります。
sshコマンドを実行するユーザーはIDファイルにアクセスする必要があり、sshはユーザーがファイル、.sshディレクトリを所有するように厳密に要求することができます。.sshディレクトリの権限は700、個人ディレクトリの権限は600キーです。ファイル。