動的にバインドされたopensshリバーストンネル用にサーバーに割り当てられたポートを決定する方法は?


16

OpenSSHの最近のバージョンでリバーストンネルを作成する場合、使用可能なポートをバインドするために0のリモートポートを指定できます。

-R [bind_address:] port:host:hostport

...

port引数が「0」の場合、リスンポートはサーバー上で動的に割り当てられ、実行時にクライアントに報告されます。

openssh sshクライアントのマンページ

私の質問は、サーバー上のこのポート割り当てを(自動化された方法で)決定する方法です。sshクライアントを実行しているホストに報告されているが、このポートに接続してクライアントのサービスにアクセスしたいターゲットには報告されていないように思われます。

私が考えることができる2つの類似したオプションは、実行中です

# netstat -ntlp

サーバー上で、sshdによって127.0.0.1にバインドされている疑わしいポートを探すか、または

# lsof -p $PPID | grep TCP | grep LISTEN

ただし、自動化の観点からはこれらはどちらも快適ではありません。また、このようなトンネルが複数作成された場合、動的ポートを元のサービスポートに戻す方法はありません。

SSH_CONNECTION環境変数と同等のように、アクティブトンネルの場合、sshdサーバー側でアクティブトンネル(ローカルポート番号とリモートポート番号の両方)のリストを効果的に取得するために不足しているものはありますか?

一部のコンテキストでは、ホストへの非常に多くの同時逆トンネルを作成し、多くの異なるホスト上の同じポート番号にトンネリングして戻そうとしています。TCPスタックでポートプールを自動的に管理することが、これを行う最も効果的な方法のようです。


「-R 0:xxxx:y」構文を使用すると、sshは「stderrのxxxx:yへのリモート転送用に割り当てられたポート49488」を出力します。
BlakBat

はい、問題はサーバー側にその情報を取得する方法です
-codedstructure

回答:


1

sshd_config構成ファイルで「LogLevel」をDEBUG1(または任意のDEBUGレベル)に設定すると、sshdはポート番号を/var/log/auth.logに記録します。

多くのログが記録されるため、DEBUG以上のLogLevelを使用するとプライバシーのリスクになる可能性があることを忘れないでください。

(/var/log/auth.logから、関連情報を表示するために数行を削除しました)

Jun 24 06:18:24 radon sshd[9334]: Connection from 192.168.13.10 port 39193
Jun 24 06:18:24 radon sshd[9334]: Accepted publickey for lornix from 192.168.13.10 port 39193 ssh2
Jun 24 06:18:24 radon sshd[9334]: pam_unix(sshd:session): session opened for user lornix by (uid=0)
Jun 24 06:18:24 radon sshd[9334]: User child is on pid 9339
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on 0.0.0.0 port 0.
Jun 24 06:18:24 radon sshd[9339]: debug1: Allocated listen port 39813
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 0: new [port listener]
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on :: port 39813.
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 1: new [port listener]
Jun 24 06:18:27 radon sshd[9339]: Received disconnect from 192.168.13.10: 11: disconnected by user

従うと、接続情報を解析できる場所と、転送されたポート(この場合は39813)を確認できます。

2台のマシン間でこのコマンドラインを使用しました。ssh-keyログインが設定されているため、パスワードのプロンプトや遅延はありません

-xenon- lornix:~> ssh -R "*:0:radon:22" -N -T radon
Allocated port 39813 for remote forward to radon:22

-Nはコマンドが指定されないことを指定し、-Tはこの接続のttyの割り当てを停止します。

ポート接続情報を広める別の方法は、クライアント側からそれを解析し、電子メール、ジャバー、テキストメッセージ、煙信号または鳩を送信して、必要な人にポート番号を伝えることです。


0

stderrをsshプログラムにパイプして、ターゲットマシン上のサーバーへの接続を開き、そのマシン名/ IPアドレス/シリアル番号/ポート番号とともに何でも報告できます。このようなもの:

% ssh -R "*:0:radon:22" -N -T radon 2>&1 | sed "s/^/`uname -n` /" | netcat radon 3743
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.