NATの背後にあるターゲットコンピュータに接続できるようにSSHトンネルを設定しました。私のコンピュータの/etc/inittabに以下を置きました。
tu:2345:respawn:/usr/bin/autossh -M 20000 -f -n -N -T -R 6790:localhost:22 [email protected]
動作します。つまり、ssh -p 6790 me@localhost を実行して接続できます。ただし、場合によっては、ターゲット コンピューターに次のメッセージが表示されます。
INIT: Id "tu" respawning too fast, disabled for 5 minutes
サーバーの/var/log/secureに次のものがあります。
Oct 29 03:11:15 vm sshd[19725]: Accepted publickey for me from 90.179.155.74 port 37416 ssh2
Oct 29 03:11:15 vm sshd[19727]: Received disconnect from 90.179.155.74: 11: disconnected by user
Oct 29 03:17:04 vm sshd[20892]: Accepted publickey for me from 90.179.155.74 port 40116 ssh2
Oct 29 03:17:15 vm sshd[20896]: error: bind: Address already in use
Oct 29 03:17:19 vm sshd[20896]: error: channel_setup_fwd_listener: cannot listen to port: 20000
このような状況が続いています。何が間違っているのか知っていますか?
答え1
わかりました。答えを見つけました。 -f オプションを使用して autossh を呼び出すと、それ自体がデーモンプロセスにフォークされ、親プロセスが終了します。だからinitはそれを再生成します...そして続けて...
私はautosshを使うべきだとは思わず、sshだけを使うべきだと思います。 respawnはinitによって実行されるため、autosshによる別の自動respawnは必要ありません。私はその行を次のように変更しました。
tu:2345:respawn:/usr/bin/ssh -n -N -T -R 6791:localhost:22 [email protected]
私も追加しました
ServerAliveInterval 15
ServerAliveCountMax 2
接続を維持するには、/etc/ssh/ssh_configに移動します。
私の考えでは、この設定は大丈夫だと思います。
答え2
ssh
自分の答えで述べたように、代わりにgood oldを使用するのがautossh
効果的であれば、それは良いことであり、読みを中止することができます。
私はssh / sshd設定調整がまったく機能せず、時には信頼できるトンネルが動作する状況に何度もありました。保留とにかく善意で衝突するよりも。これらすべての場合、autossh
それは魅力のように動作します。
したがって、最終的にこれに戻ると、autossh
私が使用する方法は次のようになります。inittab
セッション内で実行するのではなく、screen
セッション内で実行します。簡単なスクリプトを作成し、次のように呼び出してみましょうautossh.sh
。
#!/bin/sh
tunnelsite=autossh-host1
if ! screen -ls | grep -F .$tunnelsite >/dev/null; then
screen -d -m -S $tunnelsite autossh -N $tunnelsite
fi
スクリプトは、すでに実行されている指定された名前のスクリーンセッションがあることを確認し、それを終了し、そうでなければ作成します。
定期的に実行するようにクローンジョブをスケジュールします。
*/15 * * * * AUTOSSH_PORT=0 /path/to/autossh.sh
これはAUTOSSH_PORT=0
、Mac OS Xで経験している奇妙な問題を解決するためのものです。無視しても構いませんが、私はLinuxでもこの方法を問題なく使用しています。
最後に、セキュリティのヒント:まだこれを行わない限り、専用SSHキーを使用してautosshを介してトンネルを認証し、次のオプションにキー.ssh/authorized_keys
認証を制限します。
command="/bin/false",no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA...
これにより、キーが破損してもトンネルを作成するためにのみ使用できます。
実際、GitHubにはこの設定を簡単にするスクリプトプロジェクトがあります。https://github.com/janosgyerik/autossh-tunnel