খোলা এসএসএইচ টানেলগুলি তালিকাবদ্ধ করুন


67

আমি আমার লিনাক্স মেশিনে বিভিন্ন সার্ভারগুলিতে প্রচুর এসএসএইচ টানেলগুলি ব্যবহার করি (ডাটাবেসগুলিতে টানেল দেওয়ার জন্য, ওয়েব সার্ভার ইত্যাদি) এবং এটি শেল স্ক্রিপ্টের মাধ্যমে বর্তমান উন্মুক্ত টানেলের তালিকা দেখার পক্ষে খুব সহজেই কার্যকর হবে।

আমি এর লাইনগুলিতে নেটস্পটে গ্রিপের মাধ্যমে স্থানীয় সংযোগগুলি সনাক্ত করতে পারি:

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

তবে এটি আমাকে দূরবর্তী বন্দরটি এর সাথে সংযুক্ত দেখায় না (এবং স্পষ্টতই সুরক্ষিত নয় এমন স্ট্যান্ডার্ড এসএসএইচ সংযোগ রয়েছে)

আপডেট : উত্তরগুলি ঠিক আছে তবে আমার সাথে সংযুক্ত রিমোট পোর্টটি প্রদর্শন করছে না। উদাহরণস্বরূপ, আমার প্রায়শই মাইএসকিএল হয়ে একটি সুড়ঙ্গ থাকে, সার্ভারে লোকালহোস্ট: 3308 ম্যাপিং: 3306 বলে। সাধারণত আমি যে স্থানীয় পোর্টগুলি বেছে নিয়েছি তা অনুমান করতে পারি তবে উভয়টিতে অ্যাক্সেস পেয়ে ভাল লাগবে।

কোন ধারনা?


4
আমি সম্প্রতি এর মতো কয়েকটি প্রশ্ন দেখেছি (বিশেষত আপনি যা জিজ্ঞাসা করছেন তা নয়) তবে সংযোগ সম্পর্কে তথ্য সরবরাহ করার জন্য এসএসএস সম্পর্কিত। এসএসএসের মতো দুর্দান্ত, এটি এর মতো কিছু প্রাথমিক দরকারী তথ্য সরবরাহ করতে সফল হয়। কিছু ক্লায়েন্ট অভ্যন্তরীণ কমান্ড রয়েছে যা আপনি <ret> <ret> ~ # এবং $ SSH_CONNECTION এনভায়রনমেন্ট ভেরিয়েবলের মতো চালাতে পারেন তবে সেগুলি সত্যই বিশদে বিশদ। চলমান টানেলের একটি তালিকা চমৎকার হবে। কোনও বৈশিষ্ট্যের অনুরোধের জন্য এটির সময় হতে পারে।
ডেল্টারে

উত্তর:


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)

(এটি হবে -L 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-daemon 22 (শেষ লাইন) পোর্টে শুনেছে, 2 উপ-প্রক্রিয়া তৈরি হয়েছে (প্রথম 2 লাইন, 'ব্যবহারকারীর লগইন'), 5000-র বন্দরটিতে নির্মিত একটি -আর টানেল, এবং আমার ( স্থানীয়) মেশিন থেকে লোকালহোস্ট: 80 (www)


তৃতীয় লাইনটি কেবল সেখানে রয়েছে কারণ টিসিপি সকেট ব্যবহৃত হচ্ছে। এটি কেবল বলেছে যে একটি এসএসএস টানেলের মাধ্যমে আপনার স্থানীয় ওয়েব সার্ভারটি আঘাত করেছে, এটি নয় যে 33999 পোর্টটি 80 টির কাছে ফরোয়ার্ড করা হয়েছে।
শেলহোলিক

একটি-এল টানেলের সারমর্মটি জানায় ...
আকির

এটি দুর্দান্ত, এটি দূরবর্তী আইপি ঠিকানা এবং টানেলযুক্ত পোর্টগুলির তালিকা দেখায়। আমি আদর্শগতভাবে যা জানতে চাই তা হ'ল দূরবর্তী বন্দরটি এর টানেলযুক্ত। উদাহরণস্বরূপ, যদি আমি সার্ভারে স্থানীয়ভাবে 3308 থেকে 3306 পর্যন্ত একটি সুড়ঙ্গ খোলা পেয়েছি তবে আমি উভয়ই দেখতে চাই।
জেমস ফ্রস্ট

তার জন্য আপনাকে সার্ভারে লগইন করতে হবে এবং সেখানে sshd- সম্পর্কিত lsof (নির্ভরযোগ্য) চালাতে হবে বা আপনার সমস্ত ssh- কমান্ডের জন্য / proc / PID / cmdline এর আউটপুট পার্স করতে হবে .. যা আপনাকে বিভ্রান্তিমূলক ফলাফল দিতে পারে .ssh / কনফিগারেশনের মাধ্যমেও সুড়ঙ্গগুলি নির্দিষ্ট করতে পারে।
আকির

হ্যাঁ, বোঝা যায়। ফলাফলগুলি বিশ্লেষণ করতে, দূরবর্তী সার্ভারের একটি তালিকা পেতে এবং প্রত্যন্ত পোর্টগুলি পুনরুদ্ধার করতে প্রতিটিটিতে একই কমান্ড কার্যকর করতে স্ক্রিপ্টের সাথে কিছুটা চালাক হওয়া দরকার। অবশ্যই কার্যকর। এটি পেতে হবে!
জেমস ফ্রস্ট

16

এই আদেশটি ব্যবহার করে দেখুন, এটি কার্যকর হতে পারে:

ps aux | grep ssh

আমার পরামর্শটি হবে: পিএস অক্স | grep [s]
shd

16

আপনার সমস্যার ঠিক সমাধান নয়, তবে কখনও কখনও কার্যকর:

একটি ssh অধিবেশন মধ্যে থেকে:

  1. এন্টার চাপুন
  2. টাইপ করুন ~ এবং তারপরে #

সেই সেশনের জন্য আপনার টানেলগুলির উপরে সমস্ত ওপেন সংযোগগুলির একটি তালিকা আপনাকে দেখায়।


2
এটি কেবল ইন্টারেক্টিভ টানেলের জন্য কাজ করে (-N এবং -f ছাড়া…), তবে এটি জানতে আকর্ষণীয়।
এরিক

6
netstat -tpln | grep ssh
  • t: TCP
  • পি: শো প্রক্রিয়া
  • l: শুনছি
  • n: সংখ্যার মান

সম্পাদনা: @ কাকিরা মন্তব্যের উদাহরণ:

(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        

যা এই হিসাবে পড়তে পারে: এসএসএইচ (এসএসএইচডি নয়) স্থানীয় টিসিপি পোর্ট 1443 শুনছে।


এছাড়াও খেয়াল করুন যে -pকেবলমাত্র আপনার নিজস্ব প্রক্রিয়াগুলি দেখায় (মূল দ্বারা সমস্ত প্রক্রিয়া)। এছাড়াও, সেই কমান্ডটিও দেখায় sshd
ওলি

-আর টানেলের জন্য আপনাকে এড়াতে হবে-l
আকিরা

-Rযদি ব্যবহার না হয় তবে আপনি স্থানীয়ভাবে টানেলগুলি দেখতে পাচ্ছেন না। কিন্তু ঠিক আছে, ব্যবহারে, তাহলে আপনি ছাড়া ধরতে পারে-l
shellholic

5

এটি এই প্রশ্নের শীর্ষস্থানীয় গুগল ফলাফল, তাই আমি আমার উত্তর এখানে রাখব। আমি ফলাফলগুলি ফিল্টার করার জন্য সারা রাত অবধি থাকলাম এবং একটি দীর্ঘ জটিল কমান্ড নিয়ে এসেছি যা আপনাকে এই ফর্ম্যাটে কেবল আপনার বিপরীত এসএসএস টানেলগুলি দেখায়:

publicipaddress: remoteforwardedport

কোডটি এখানে, আমি উবুন্টু সার্ভারটি চালাচ্ছি ১২। আমি বিপরীত এসএসএস টানেলগুলি চালাচ্ছি যা লোকাল পোর্টটি আমার পাবলিক এসএস সার্ভারে 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
#! / বিন / সিএসএফ -ফ
প্রতিধ্বনি এসএসএইচ টানেল সংযুক্ত
প্রতিধ্বনি
foreach f (`netstat -an -p | grep tcp | grep sshd | grep -v :: | গ্রেপ-ভি 0:22 | গ্রেপ তালিকাভুক্ত | কাট-ডি" "-f45- | কাট-ডি" / "-ফ 1` )
সেট ip = `নেটস্প্যাট -আন-পি | grep tcp | grep sshd | গ্রেপ-ভি :: | গ্রেপ-ভি 0:22 | গ্রেপ ESTABLISH | গ্রেপ $ চ | কাট-ডি "" -f20- | কাট-ডি ":" -ফ 1`
# সেট এইচ = `গ্রেপ -a" $ আইপি "/ htdocs/impsip.html | গ্রেপ বিআর | কাট-ডি "" -f2`
প্রতিধ্বনি -n "ip"
প্রতিধ্বনি `netstat -an -p | grep tcp | grep sshd | গ্রেপ-ভি :: | গ্রেপ-ভি 0:22 | গ্রেপ তালিকা | গ্রেপ $ চ | কাট-ডি ":" -ফ 2 | কাট-ডি "" -f1`
#echo "$ এইচ"
শেষ

0

যেহেতু আমি লসোফ পছন্দ করি না, তাই আমি একটি বিকল্প পদ্ধতি প্রস্তাব করি (অন্য একজন লোক আমাকে শিখিয়েছে :)):

$ netstat -l | grep ssh

এইভাবে আপনি এর দ্বারা নির্মিত ssh টানেলগুলি sshLISTEN মোডে খোলা আছে (এবং এটি ডিফল্টরূপে বাদ দেওয়া যাবে netstat) দেখান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.