2013-05-09 37 views
6

Tôi đang tạo một trình mô phỏng cục bộ (không kết nối với internet) bằng kết nối SSH. Tôi đã bắt đầu sshd trên một phạm vi cụ thể của số cổng và NATing một loạt các thiết bị cho những người. Tôi phải tìm số cổng hiện đang kết nối.Tìm số cổng hiện đang kết nối SSH

OS CentOS 5,5 OpenSSH 6.1

tôi đã thực hiện những điều sau đây. Nó hoạt động cho việc sử dụng bình thường (hướng dẫn sử dụng). Nhưng khi thử một thử nghiệm nghiêm ngặt (tự động) có vẻ như đôi khi nó thất bại trong việc tìm số cổng.

#!/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

mẫu grep của bạn cho PID phải là '$ PID /', vì nó được trình bày ở dạng đó trong đầu ra; nếu không, bạn có thể kết hợp không chính xác các cổng được đánh số giống với 'PID' mà bạn đang cố gắng khớp. – Petesh

Trả lời

12

Một máy chủ OpenSSH sẽ đặt biến $SSH_CLIENT, chứa các ip hiện tại, cổng client và server port tách bằng dấu cách:

$ echo "$SSH_CLIENT" 
127.0.0.1 59064 22 

Để có được số cổng phiên hiện tại được kết nối với, do đó bạn có thể sử dụng echo ${SSH_CLIENT##* }.

+1

và nếu anh ta muốn anh ta có thể đọc biến môi trường đó từ tệp '/ proc//environ' bằng cách chuyển nó qua' tr '\ 0' '\ n'' – Petesh

+0

@that anh chàng Brilliant khác! toàn bộ kịch bản của tôi giờ đã bị giảm xuống thành lệnh echo. Tôi không thể tìm thấy biến này. Thnx. – Antarus

Các vấn đề liên quan