-এস বিকল্প দিয়ে শুরু করা এসএসএইচ সেশনটি কীভাবে হত্যা করবেন (পটভূমিতে চালানো)


49

আমি এতে বেশ হারিয়ে গেছি। ম্যান পৃষ্ঠা থেকে:

 -f      Requests ssh to go to background just before command execution.

-fবিকল্পটি দিয়ে এসএসএইচ শুরু করার পরে , আমার একটি কার্যকরী টানেল রয়েছে। তবে এটি ব্যবহার শেষ করার পরে আমি কীভাবে এর সাথে আরও ইন্টারঅ্যাকশন করতে হবে তা জানি না। উদাহরণস্বরূপ, আমি যখন এসএসএইচ টানেলটি শেষ করি তখন এটি বন্ধ করতে পারি না

আমার জানা সাধারণ পদ্ধতিগুলি কাজ করে না। উদাহরণস্বরূপ, jobsকিছুই প্রদান করে না। ~কমান্ড স্বীকৃত নয় (এবং আমি এটা ঠিক কিভাবে ব্যবহার করার যাহাই হউক না কেন জানি না)।

তবে, pgrepআমাকে বলুন যে এসএসএইচ টানেলটি এখনও চলছে (আমি টার্মিনালটি বন্ধ করার পরে ইত্যাদি)। আমি এটির সাথে কীভাবে যোগাযোগ করব? আমি কীভাবে এটি বন্ধ করব?

উত্তর:


64

স্ক্রিপ্টিংয়ের জন্য বিশেষত ভাল সমাধান হ'ল master modeনিয়ন্ত্রণ আদেশগুলির জন্য সকেট সহ:

ssh -f -N -M -S <path-to-socket> -L <port>:<host>:<port> <server>

এটি আবার বন্ধ করতে:

ssh -S <path-to-socket> -O exit <server>

এটি প্রক্রিয়া আইডির জন্য গ্রেপিং এবং অন্য পদ্ধতির সাথে সম্পর্কিত হতে পারে এমন কোনও সময় সমস্যা উভয়ই এড়িয়ে যায়।


10
নিরবিচ্ছিন্ন হওয়ার জন্য কিছুটা প্রসারিত করার জন্য, <path-to-sket> একটি ফাইলের জন্য একটি পথ যা ssh ক্লায়েন্টের মাস্টার উদাহরণটি অন্য ssh ক্লায়েন্টের সাথে আন্তঃ-প্রক্রিয়া যোগাযোগের জন্য তৈরি করবে যা মাস্টার উদাহরণটির সংযোগ ভাগ করতে চায়। তৈরি ফাইলটি আসলে একটি ইউনিক্স ডোমেন সকেটের প্রতিনিধিত্ব করবে। এটি নামকরণ এবং যা-ই হোক না কেন এবং যেখানেই আপনি চান যেখানে এটি অবস্থিত করা যেতে পারে, উদাহরণস্বরূপ /tmp/session1(যদিও এটি % প্যাটার্ন ব্যবহার করে এটির নামকরণের প্রস্তাব দেওয়া হয় - এতে কন্ট্রোলপথের বিবরণ দেখুন man ssh_config)
গোলেম

1
এছাড়াও মনে হচ্ছে <ssh -S <path-to-socket> -O exit <server> কমান্ডের <সার্ভার> অংশটি যে কোনও স্ট্রিং হতে পারে তবে এটি উপস্থিত থাকতে হবে। এ রকম আনাড়ি।
Golem

1
এই উত্তর এবং প্রশ্নটি কিছুটা পুরনো, তবে আমি এটিকে সম্ভবত সবচেয়ে মার্জিত এবং 'সঠিক' এই সমস্যাটিকে পরিচালনা করার উপায় হিসাবে সমর্থন করেছি seen ধন্যবাদ জনাব!
zentechinc

41

আমি সমাধানটি এখানে পেয়েছি: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/

সর্বোত্তম উপায় - টানেলগুলি যে স্বয়ংক্রিয়ভাবে বন্ধ হয়

যেমনটি আগে উল্লেখ করা হয়েছে, -f -N সুইচ সংমিশ্রণটি ব্যবহার না করে আমরা কেবল -f একা ব্যবহার করতে পারি, তবে দূরবর্তী মেশিনে একটি আদেশও কার্যকর করতে পারি। তবে, কোন কমান্ডটি কার্যকর করা উচিত, যেহেতু আমাদের কেবল একটি টানেল শুরু করতে হবে?

ঘুম তখন সবার সবচেয়ে কার্যকর আদেশ হতে পারে! এই বিশেষ পরিস্থিতিতে ঘুমের দুটি সুবিধা রয়েছে:

  • এটি কিছুই করে না, তাই কোনও সংস্থান ব্যবহার করা হয় না
  • ব্যবহারকারী কতক্ষণ এটি কার্যকর করা হবে তা নির্দিষ্ট করতে পারে

এইগুলি কীভাবে এসএসএস টানেলটি স্বয়ংক্রিয়ভাবে বন্ধ করতে সহায়তা করে তা নীচে ব্যাখ্যা করা হয়েছে।

রিমোট মেশিনে 10 সেকেন্ডের জন্য স্লিপ কমান্ড কার্যকর করার সময় আমরা ব্যাকগ্রাউন্ডে ssh অধিবেশন শুরু করি। সেকেন্ডের সংখ্যাটি গুরুত্বপূর্ণ নয়। একই সময়ে, আমরা ভ্যানসিউভিউয়ারকে ঠিক আগের মতোই চালিত করি:

[me@local]$ ssh -f -L 25901:127.0.0.1:5901 me@remote.example.org sleep 10; \
          vncviewer 127.0.0.1:25901:1

এই ক্ষেত্রে, ssh ক্লায়েন্টকে ssh সেশনটিকে ব্যাকগ্রাউন্ডে (-f) কাঁটাচামচ করার জন্য, টানেলটি তৈরি করতে (-L 25901: 127.0.0.1: 5901) নির্দেশ দেওয়া হয়েছে এবং 10 সেকেন্ডের জন্য রিমোট সার্ভারে স্লিপ কমান্ড প্রয়োগ করুন (ঘুম 10)।

এই পদ্ধতি এবং পূর্ববর্তী এক (-N সুইচ) এর মধ্যে পার্থক্যটি মূলত: এই ক্ষেত্রে এসএসএস ক্লায়েন্টের প্রাথমিক লক্ষ্যটি টানেল তৈরি করা নয়, বরং 10 সেকেন্ডের জন্য স্লিপ কমান্ড চালানো। টানেলটি তৈরি করা এক ধরণের পার্শ্ব-প্রতিক্রিয়া, একটি মাধ্যমিক লক্ষ্য। যদি ভিএনসিভিউয়ার ব্যবহার না করা হয়, তবে এসএসএস ক্লায়েন্টটি 10 ​​সেকেন্ড সময়কালে প্রস্থান করবে, কারণ এটির আর কোনও কাজ করার দরকার নেই, একই সাথে টানেলটি ধ্বংস করে দেওয়া।

স্লিপ কমান্ড কার্যকর করার সময়, যদি এই প্রক্রিয়াতে অন্য কোনও প্রক্রিয়া, ভিএনসিভিউয়ার, সেই টানেলটি ব্যবহার শুরু করে এবং এটি 10 ​​সেকেন্ড সময়কালের পরেও ধরে রাখে, তবে এসএসএস ক্লায়েন্ট তার দূরবর্তী কাজ (ঘুমের প্রয়োগ) শেষ করেও, এটি করতে পারে না প্রস্থান করুন কারণ অন্য প্রক্রিয়াটি টানেলটি দখল করে। অন্য কথায়, এসএসএস ক্লায়েন্টটি টানেলটি ধ্বংস করতে পারে না কারণ এটিতে ভ্যানসিভিউয়ারকেও হত্যা করতে হবে। যখন ভিএনসিভিউয়ারটি টানেলটি ব্যবহার বন্ধ করে দেয়, তখন এসএসএস ক্লায়েন্টটিও খুব বেশি প্রস্থান করে, কারণ এটি ইতিমধ্যে এর লক্ষ্যটি সম্পন্ন করেছে।

এইভাবে, কোনও ssh প্রক্রিয়া ব্যাকগ্রাউন্ডে চলমান ছেড়ে যায়।


4
একটি সংক্ষিপ্ত মন্তব্য / সংশোধন: যতদূর আমি জানি আপনি vncviewer 127.0.0.1::25091পোর্ট সিনট্যাক্সটি ব্যবহার করছেন এবং ডিসপ্লে সিনট্যাক্সটি না হিসাবে আপনাকে নির্দিষ্ট করতে হবে ।
ক্রিশ্চিয়ান ওল্ফ

এটি একটি দুর্দান্ত ধারণা, এবং উইন্ডোজে আমার যে সমস্যাটি ছিল তা ঝরঝরে করে পদক্ষেপ নিয়েছে। উইন্ডোজ জাহাজের সাম্প্রতিক সংস্করণগুলি একটি এসএসএস ক্লায়েন্ট সহ, এবং এটি তত্ত্বের ক্ষেত্রে -S বিকল্পকে সমর্থন করে, তবে কেবল আমার পক্ষে কাজ করে বলে মনে হয় না।
কেইলি

9

টানেলটি মারতে, কোন টুঙ্ক প্রক্রিয়াটি আপনার টানেলটি চালাচ্ছে তা নির্ধারণ করতে ps -C sshবা ps | grep sshঅন্য কোনও রূপ ব্যবহার করুন। তারপরে এটি মেরে ফেলুন।

বিকল্পভাবে, আপনি এই বন্দরের কোনটি খোলা আছে তা নির্ধারণ করে প্রক্রিয়াটি সন্ধান করতে পারেন:

netstat -lnpt | awk '$4 ~ /:1234$/ {sub(/\/.*/, "", $7); print $7}'

আপনি যদি আপনার মেশিনে চলমান সমস্ত ssh ক্লায়েন্টকে (আপনার ব্যবহারকারী হিসাবে) হত্যা করতে চান তবে pkill sshএটি করবেন will


6

এখানে অন্যদের দ্বারা উত্তর হিসাবে, pkill sshএটি হত্যা।

আবার ফিরিয়ে আনা যেতে পারে এমন একটি টানেল তৈরি করতে, আমি screenএটি -fবিকল্প ছাড়াই এটি শুরু করি এবং তারপরে স্ক্রিনটি বিচ্ছিন্ন করি Ctrl-A D। টানেলটি ফিরিয়ে আনতে, কল করুন screen -r



1
আপনি যদি দূর থেকে সংযোগ করছেন তবে সাবধান হন। pkill ssh এমনকি আপনার বর্তমান সংযোগটি মেরে ফেলবে।
কেনেয়ুত

@ একনয়ুত এখনও ব্যবহার করার অন্য একটি কারণ screen
হাওটিয়ান ইয়াং

0

যখন আমি এর সাথে একটি সুড়ঙ্গ শুরু করি:

ssh -fN -D 8080 SOME_IP_HERE -l LOGIN_NAME_HERE
  • -f কমান্ড প্রয়োগের ঠিক আগে পটভূমিতে যাওয়ার জন্য ssh কে অনুরোধ করুন।
  • -Nরিমোট কমান্ড প্রয়োগ করবেন না। এটি কেবল ফরওয়ার্ডিং বন্দরগুলির জন্য দরকারী।
  • -D স্থানীয় "গতিশীল" অ্যাপ্লিকেশন-স্তরের পোর্ট ফরওয়ার্ডিং নির্দিষ্ট করে।
  • -l ব্যবহারকারীকে দূরবর্তী মেশিনে লগ ইন করতে নির্দিষ্ট করে।

আমি এটি দিয়ে এটি বন্ধ করতে পারি:

ps -lef | grep ssh | grep "8080" | awk "{print \$2}" | xargs kill

-1

একটি কমান্ড লাইনে সমস্ত টানেল মারার সবচেয়ে ভাল সমাধানটি হ'ল

ps -lef|grep ssh|grep "\-L"|awk '{print $4}'|xargs kill

ssh সেশনের জন্য, কেবল টানেল বিকল্পটি সরিয়ে দিন

ps -lef|grep ssh|awk '{print $4}'|xargs kill

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