एसएसएच सुरंगों की सूची खोलें


67

मैं अपने लिनक्स मशीन (डेटाबेस, वेब सर्वर आदि के लिए सुरंग बनाने के लिए) पर विभिन्न सर्वरों के लिए बहुत सारे एसएसएच सुरंगों का उपयोग करता हूं और शेल स्क्रिप्ट के माध्यम से वर्तमान खुली सुरंगों की सूची देखना वास्तव में आसान होगा।

मैं नेटस्टैट पर एक grep के माध्यम से स्थानीय कनेक्शन की पहचान कर सकता हूं:

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

लेकिन यह मुझे दूरस्थ पोर्ट से जुड़ा हुआ नहीं दिखाएगा (और जाहिर है इसमें मानक एसएसएच कनेक्शन शामिल हैं जो ट्यून किए गए नहीं हैं)

अद्यतन : उत्तर ठीक हैं, लेकिन मुझे वह रिमोट पोर्ट नहीं दिखा रहा है जिससे मैं जुड़ा हुआ हूं। उदाहरण के लिए, मेरे पास अक्सर mysql के माध्यम से एक सुरंग है, स्थानीयहोस्ट करें: सर्वर पर 3308 मैपिंग से: 3306। आम तौर पर मैं उन स्थानीय बंदरगाहों द्वारा अनुमान लगा सकता हूं जिन्हें मैंने चुना है लेकिन दोनों के लिए उपयोग करना अच्छा होगा।

कोई विचार?


4
मैंने हाल ही में इस तरह के एक जोड़े को देखा है (विशेष रूप से आप क्या पूछ रहे हैं), लेकिन कनेक्शन के बारे में जानकारी प्रदान करने के लिए ssh से संबंधित है। जैसे ही ssh शांत होता है, यह उस तरह की कुछ बुनियादी उपयोगी जानकारी प्रदान करता है। कुछ क्लाइंट आंतरिक कमांड हैं जिन्हें आप चला सकते हैं जैसे <ret> <ret> ~ # और $ SSH_CONNECTION पर्यावरण चर, लेकिन वे वास्तव में विवरण पर विरल हैं। सुरंगों को चलाने की एक सूची अच्छी होगी। शायद एक सुविधा अनुरोध के लिए इसका समय।
23

जवाबों:


72

यदि आप केवल द्वारा बनाई गई सुरंगों को सूचीबद्ध करना चाहते हैं 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)

(यह एक एल 9090 होगा: लोकलहोस्ट: 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 लाइन, 'उपयोगकर्ता का लॉगिन'), पोर्ट 5000 पर बनाई गई एक आर-आर सुरंग, और एक एल सुरंग जो आगे से एक बंदरगाह है ( लोकल) मशीन से लोकलहोस्ट: 80 (www)।


तीसरी पंक्ति केवल इसलिए है क्योंकि टीसीपी सॉकेट उपयोग में है। यह सिर्फ कहता है कि एक ssh सुरंग के माध्यम से कुछ आपके स्थानीय वेब सर्वर को मारा गया है, न कि 33999 पोर्ट को 80 पर भेजा जाता है।
21:02 बजे शेलहोलिक

एक एल सुरंग का सार ...
अकीरा

यह ठीक है, इसका दूरस्थ आईपी पता और ट्यून किए गए बंदरगाहों की सूची दिखा रहा है। क्या मैं आदर्श रूप से जानना चाहता हूं कि रिमोट पोर्ट क्या है जो इसके लिए तैयार है। उदाहरण के लिए, यदि मुझे उस सर्वर पर 3308 से स्थानीय स्तर पर 3306 तक खुली हुई है जो मैं दोनों को देखना चाहता हूं।
जेम्स फ्रॉस्ट

इसके लिए आपको या तो सर्वर पर लॉगिन करना होगा और वहां sshd-related lsof को निष्पादित करना होगा (विश्वसनीय) या अपने ssh- कमांड के सभी के लिए / proc / PID / cmdline के आउटपुट को पार्स करें .. जो कि आपको तब से गलत परिणाम दे सकता है। .ssh / config के माध्यम से सुरंगों को भी निर्दिष्ट कर सकते हैं।
अकीरा

हां, समझ में आता है। स्क्रिप्ट के साथ थोड़ा चतुर होने की जरूरत है तो परिणामों को पार्स करने के लिए, दूरस्थ सर्वर की एक सूची प्राप्त करें और दूरस्थ बंदरगाहों को पुनः प्राप्त करने के लिए प्रत्येक पर एक ही कमांड निष्पादित करें। निश्चित रूप से उल्लेखनीय। उस पर मिलेगा!
जेम्स फ्रॉस्ट

16

इस आदेश का प्रयास करें, यह उपयोगी हो सकता है:

ps aux | grep ssh

मेरा सुझाव होगा: ps aux | grep [s] shd
CousinCocaine

16

आपकी समस्या के लिए बिल्कुल समाधान नहीं है, लेकिन कभी-कभी आसान भी है:

सत्र सत्र के भीतर से:

  1. एंटर दबाए
  2. टाइप ~ और फिर #

आपको उस सत्र के लिए अपनी सुरंगों पर सभी खुले कनेक्शनों की एक सूची दिखाता है।


2
यह केवल इंटरेक्टिव सुरंगों (बिना -N और -f,…) के लिए काम करता है, लेकिन यह जानना दिलचस्प है।
इरिक

6
netstat -tpln | grep ssh
  • t: टीसीपी
  • पी: शो प्रक्रिया
  • l: सुन रहा हूं
  • n: संख्यात्मक मान

EDIT: @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 को सुन रहा है।


यह भी ध्यान दें कि -pकेवल आपकी अपनी प्रक्रियाएँ (सभी प्रक्रियाएँ रूट द्वारा) दिखाती हैं। साथ ही, वह कमांड sshdभी दिखाता है।
ओली

के लिए -R सुरंगों से आपको बचना होगा-l
अकीरा

यदि आप उपयोग में नहीं हैं तो आप स्थानीय रूप से -Rसुरंगों को नहीं देख सकते हैं। लेकिन सही है, अगर उपयोग में है, तो आप उन्हें बिना-l
शेलहोलिक

5

यह इस प्रश्न के लिए शीर्ष Google परिणाम है, इसलिए मैं अपना उत्तर यहां दूंगा। मैं सारी रात परिणामों को छानता रहा, और एक लंबी जटिल कमांड के साथ आया जो आपको इस विकल्प में केवल आपकी रिवर्स ssh सुरंग दिखाता है:

publicipaddress: remoteforwardedport

यहाँ कोड है, मैं Ubuntu Server 12 चला रहा हूँ। मैं रिवर्स ssh सुरंगें चला रहा हूँ जो कि मेरे सार्वजनिक ssh सर्वर पर स्थानीय पोर्ट 5900 को फॉरवर्ड करती हैं, और यह निफ्टी कमांड रिमोट पोर्ट के साथ मेरे सभी सार्वजनिक आईपी पते को दिखाता है।

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

2
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 (\S+:)?[[: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
#! / बिन / csh -f
इको एसएसएच टनल कनेक्टेड
गूंज
foreach f (`netstat -an -p | grep tcp | grep sshd | grep -v ::: grep -v 0:22 | grep LISTEN | cut -d" "-f45-! cut -d" / "-f1`` )
set ip = `netstat -an -p | grep tcp | grep sshd | grep -v :: | grep -v 0:22 | grep ESTABLISH | grep $ f | cut -d "" -f20- | कट -d ":" -f1`
#set h = `grep -a" $ ip "/htdocs/impsip.html | grep br | कट -d "" -f2`
इको-एन "$ आईपी"
गूंज `netstat -an -p | grep tcp | grep sshd | grep -v :: | grep -v 0:22 | grep लिस्टेन | grep $ f | cut -d ":" -f2 | कट -d "" -f1`
# जियो "$ ज"
समाप्त

0

चूँकि मुझे lsof पसंद नहीं है, मैं एक वैकल्पिक विधि सुझाता हूँ (एक और आदमी ने मुझे सिखाया :)):

$ netstat -l | grep ssh

इस तरह से आप दिखाते sshहैं कि इसके द्वारा बनाई गई ssh सुरंगें LISTEN मोड में खोली गई हैं (और डिफ़ॉल्ट रूप से छोड़ा गया है netstat)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.