web-dev-qa-db-ja.com

アクティブなsshポートフォワーディングを知る方法

~/.ssh/configで、サーバーごとに異なるポートでVNCの多くのポート転送を構成しました。

SSHセッションを開いたときにどのポートに転送されているかを知るのに役立つコマンドはありますか?

11
slc66

-vオプションをsshに使用すると、転送内容が表示されます(ただし、他の多くのデバッグメッセージも表示されます)。

ssh -v -L2222:localhost:22 remotehost

表示されます:

...debug messages...
debug1: Authentication succeeded (publickey).
Authenticated to remotehost ([10.0.0.23]:22).
debug1: Local connections to LOCALHOST:2222 forwarded to remote address localhost:22
debug1: Local forwarding listening on ::1 port 2222.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 2222.
...debug messages...

そして、そのリモートシェルに接続すると、特別なキーシーケンスを入力できます。

~#

次のような接続がリストされます。

The following connections are open:
  #3 client-session (t4 r0 i0/0 o0/0 fd 7/8 cc -1)
  #4 direct-tcpip: listening port 2222 for localhost port 22, connect from 127.0.0.1 port 59742 (t4 r1 i0/0 o0/0 fd 10/10 cc -1)

ただし、これは別のプログラムで実際に使用されている転送ポートのみをリストすることに注意してください(この場合、ローカルマシンでremotehostに転送するためにtelnet localhost 2222を実行しました。

現在転送されている接続がない場合でも、次のようにnetstatコマンドを使用して、sshコマンドがローカルでリッスンしているものを確認できます。

% netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:2222          0.0.0.0:*               LISTEN      28995/ssh       
tcp6       0      0 ::1:2222                :::*                    LISTEN      28995/ssh       

netstatコマンドもおそらく他のものをリストしますが、出力で検索したいのは、sshプロセスを検索するPID/Program列と、Local Address列です。どのポートがリッスンされているかを表示します。この例では、port 2222で、マシン上のIPv4とIPv6の両方のインターフェースをリッスンしています。

12
aculich