2013-05-09 29 views
6

SSH接続を使用して(インターネットに接続されていない)ローカルシミュレータを作成しています。私はポート番号の特定の範囲でsshdを開始し、それらのデバイスの範囲をNATする。私は現在接続されているポート番号を見つけなければなりません。現在接続されているポート番号を見つけるSSH

OSはCentOS 5.5 のOpenSSH 6.1

私は次のことをやりました。それは通常の使用(手動のユーザー)のために動作します。しかし、厳密なテスト(自動化)を試みるときにポート番号を見つけることが時々失敗するようです。

#!/bin/bash 

WHOINFO=`who -m` 

USERNAME=`echo $WHOINFO | awk 'NR==1{print $1}'` 
PTSNUMBER=`echo $WHOINFO | awk 'NR==1{print $2}'` 

USERSTR=$USERNAME"@"$PTSNUMBER 

PID=`ps -eLf | grep $USERSTR | awk 'NR==1{print $3}'` 

if [ -z "$PID" ]; 
then 
     exit 
fi 

PORTSTR=`netstat -natp | grep $PID | awk 'NR==1{print $4}'` 

PORTNUMBER=${PORTSTR//*:/} 

echo $PORTNUMBER 
+0

あなたのgrepパターンは '$ PID /'でなければなりません。さもなければ、一致させようとしている 'PID'と同じ番号が付いたポートには、間違って一致する可能性があります。 – Petesh

答えて

12

OpenSSHサーバは、スペースで区切っ電流ip、クライアントポートとサーバポートを含む変数$SSH_CLIENTを設定します:

$ echo "$SSH_CLIENT" 
127.0.0.1 59064 22 

は、現在のセッションが接続されているポート番号を取得するには、したがってecho ${SSH_CLIENT##* }を使用することができます。

+1

彼が '/ proc//environ'ファイルからその環境変数を' tr '\ 0 "' \ n" ' – Petesh

+0

@その他の男のブリリアントにパイプすることで読むことができるようにしたい場合、私のスクリプト全体がエコーコマンドになりました。私はこの変数を見つけることができませんでした。 Thnx。 – Antarus

関連する問題