web-dev-qa-db-ja.com

開いているSSHトンネルを一覧表示する

私は自分のLinuxマシン上のさまざまなサーバへのたくさんのSSHトンネル(データベース、Webサーバなどへのトンネリングのために)を使っています、そして現在のオープントンネルのリストをシェルスクリプトで見るのは本当に便利でしょう。

私はnetstat上のgrepで以下の行に沿ってローカル接続を識別することができます。

netstat -n --protocol inet | grep ':22'

しかし、これは私にそれが接続されているリモートポートを表示しません(そして明らかにトンネリングされていない標準的なSSH接続を含みます)

UPDATE:答えは問題ありませんが、接続しているリモートポートは表示されません。たとえば、私はよくmysqlへのトンネルを通り抜けています。サーバー上でlocalhost:3308マッピング:3306と言っています。通常、私は自分が選んだローカルポートから推測することができますが、両方にアクセスできるのはいいでしょう。

何か案は?

64
James Frost

sshによって作成されたトンネルのみを一覧表示したい場合は、

% Sudo lsof -i -n | egrep '\<ssh\>'
ssh  19749  user  3u  IPv4 148088244   TCP x.x.x.x:39689->y.y.y.y:22 (ESTABLISHED)
ssh  19749  user  4u  IPv6 148088282   TCP [::1]:9090 (LISTEN)
ssh  19749  user  5u  IPv4 148088283   TCP 127.0.0.1:9090 (LISTEN)

(これは-L 9090:localhost:80トンネルになります)

sshdに対して行われたトンネル/接続を見たい場合は:

 % Sudo lsof -i -n | egrep '\<sshd\>'
sshd  15767  root  3u  IPv4 147401205   TCP x.x.x.x:22->y.y.y.y:27479 (ESTABLISHED)
sshd  15842  user  3u  IPv4 147401205   TCP x.x.x.x:22->y.y.y.y:27479 (ESTABLISHED)
sshd  15842  user  9u  IPv4 148002889   TCP 127.0.0.1:33999->127.0.0.1:www (ESTABLISHED)
sshd  1396   user  9u  IPv4 148056581   TCP 127.0.0.1:5000 (LISTEN)
sshd  25936  root  3u  IPv4 143971728   TCP *:22 (LISTEN)

sshデーモンはポート22(最後の行)で待機し、2つのサブプロセス(最初の2行、 'user'のログイン)が生成され、-Rトンネルがポート5000に作成され、-Lトンネルがmyポートから転送しますlocalhostからlocalhostへのマシン:80(www)。

69
akira

このコマンドを試してください。役に立つかもしれません:

ps aux | grep ssh
13
Rajesh

厳密にはあなたの問題に対する解決策ではありませんが、時々また便利です:

SSHセッション内から:

  1. enterを押す
  2. 〜と入力して#

そのセッションでトンネルを介して開かれているすべての接続のリストを表示します。

13
reto
netstat -tpln | grep ssh
  • t:TCP
  • p:表示プロセス
  • l:聞く
  • n:数値

編集:@akiraコメントの例:

(header added, tested on Debian wheezy)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:1443          0.0.0.0:*               LISTEN      4036/ssh        

SSH(SSHdではなく)はローカルTCPポート1443をリッスンしています。

6
shellholic

これはこの質問に対するGoogleのトップの検索結果であるため、ここに回答を掲載します。私は結果をフィルタリングしながら一晩中起きて、このフォーマットであなたのリバースSSHトンネルだけを示す長い複雑なコマンドを思い付きました:

publicipaddress:remoteforwardedport

これが、Ubuntu Server 12を実行しているコードです。ローカルポート5900をパブリックsshサーバーに転送するリバースsshトンネルを実行しています。このniftyコマンドは、すべてのパブリックIPアドレスをリモートポートとともに表示します。

Sudo lsof -i -n | egrep '\<sshd\>' | grep -v ":ssh" | grep LISTEN | sed 1~2d | awk '{ print $2}' | while read line; do Sudo lsof -i -n | egrep $line | sed 3~3d | sed 's/.*->//' | sed 's/:......*(ESTABLISHED)//' | sed 's/.*://' | sed 's/(.*//' | sed 'N;s/\n/:/' 2>&1 ;done
4
Brandon
/sbin/ip tunnel list # replacement for the deprecated iptunnel command
0
Lucas Cimon

私はlsofが好きではないので、私は別の方法を提案します(他の人が教えてくれました:)):

$ netstat -l | grep ssh

このようにして、LISTENモードで開かれている(そしてsshによってデフォルトで省略されている)netstatによって作成されたsshトンネルを表示します。

0
FSp
report_local_port_forwardings() {

  # -a ands the selection criteria (default is or)
  # -i4 limits to ipv4 internet files
  # -P inhibits the conversion of port numbers to port names
  # -c /regex/ limits to commands matching the regex
  # -u$USER limits to processes owned by $USER
  # http://man7.org/linux/man-pages/man8/lsof.8.html
  # https://stackoverflow.com/q/34032299

  echo 
  echo "LOCAL PORT FORWARDING"
  echo
  echo "You set up the following local port forwardings:"
  echo

  lsof -a -i4 -P -c '/^ssh$/' -u$USER -s TCP:LISTEN

  echo
  echo "The processes that set up these forwardings are:"
  echo

  ps -f -p $(lsof -t -a -i4 -P -c '/^ssh$/' -u$USER -s TCP:LISTEN)

}

report_remote_port_forwardings() {

  echo 
  echo "REMOTE PORT FORWARDING"
  echo
  echo "You set up the following remote port forwardings:"
  echo

  ps -f -p $(lsof -t -a -i -c '/^ssh$/' -u$USER -s TCP:ESTABLISHED) | awk '
  NR == 1 || /R [[:digit:]]+:\S+:[[:digit:]]+.*/
  '
}

report_local_port_forwardings
report_remote_port_forwardings

出力例:

LOCAL PORT FORWARDING

You set up the following local port forwardings:

COMMAND   PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
ssh     10086 user     7u  IPv4 1924960      0t0  TCP localhost:2301 (LISTEN)
ssh     10086 user     9u  IPv4 1924964      0t0  TCP localhost:2380 (LISTEN)
ssh     10086 user    11u  IPv4 1924968      0t0  TCP localhost:2381 (LISTEN)

The processes that set up these forwardings are:

UID        PID  PPID  C STIME TTY          TIME CMD
user     10086  7074  0 13:05 pts/21   00:00:00 ssh -N ssh.example.com

REMOTE PORT FORWARDING

You set up the following remote port forwardings:

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
user      7570 30953  0 11:14 pts/18   S      0:00 ssh -N -R 9000:localhost:3000 ssh.example.com
0
Robin A. Meade
#!/ bin/csh -f 
 echo SSHトンネル接続
 echo 
 foreach f( `netstat -an -p | grep tcp | grep sshd | grep -v :: | grep -v 0:22 | grepリスト| cut -d "" -f45- | cut -d "/" -f1`)
 set ip = `netstat -an -p | grep tcp grep sshd grep -v :: | grep -v 0:22 | grep grep $ f | cut -d "" -f20- | cut -d ":" -f1` 
#set h = `grep -a" $ ip "/htdocs/impsip.html | grep br | cut -d "" -f2` 
 echo -n "$ ip" 
 echo `netstat -an -p | grep tcp grep sshd grep -v :: | grep -v 0:22 | grep LISTEN | grep grep $ f | cut -d ":" -f2 | cut -d "" -f1` 
#echo "$ h" 
 end 
0
Richard