クライアントとサーバーの2つのマシンがあります。
クライアント(企業のファイアウォールの背後にある)は、次のコマンドを使用して、パブリックにアクセス可能なIPアドレスを持つサーバーへのリバースSSHトンネルを開きます。
ssh -nNT -R0:localhost:2222 insecure@server.example.com
OpenSSH 5.3 0
以降で-R
は、1つを明示的に呼び出すのではなく、「使用可能なポートを選択する」ことを意味します。これを行う理由は、すでに使用されているポートを選択したくないためです。実際、同様のトンネルを設定する必要のあるクライアントが実際にはたくさんあります。
この時点での問題は、サーバーがどのクライアントがどのクライアントであるかを知らないことです。これらのクライアントの1つに(localhostを介して)接続し直したい場合、どのポートがどのクライアントを参照しているかをどのようにして知ることができますか?
上記の方法で使用すると、sshがコマンドラインにポート番号を報告することを認識しています。ただし、セッションを維持するためにautosshを使用したいと思います。autosshはおそらくfork / execを介して子プロセスを実行するため、実際のsshコマンドの出力はエーテルで失われます。
さらに、クライアントからリモートポートを取得する他の方法は考えられません。したがって、サーバー上のこのポートを決定する方法があるかどうか疑問に思っています。
私が持っているアイデアの1つは、何らかの方法で/ etc / sshrcを使用することです。これは、おそらくすべての接続に対して実行されるスクリプトです。ただし、ここで適切な情報を取得する方法がわかりません(おそらく、その接続を処理する特定のsshdプロセスのPIDですか?)ポインターが欲しいです。
ありがとう!