কীভাবে একটি অটোশ টানেল থামাতে / মারতে হবে?


17

এখন আমার কাছে একটি অটোশ টানেল রয়েছে, এটি বন্ধ করার সঠিক উপায় কী?

এটি করার কোনও সহজ উপায় নেই বলে মনে হয়। ডকুমেন্টেশন এই অংশে অস্পষ্ট।

সহজ উপায়টি কি মনে হচ্ছে মেশিনটি রিবুট করা যায়? এটা কি সঠিক?

উত্তর:


21

না, হত্যার সঠিক উপায় autosshহ'ল প্রক্রিয়াটি হ'ল autosshঅন্য কিছু নয়।

কারণ

# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable

এটি autosshকেবল একটি শেল স্ক্রিপ্ট, কোনও পরিষেবা নয় । এটি একেবারে শেষ লাইনে একটি নতুন প্রোগ্রাম শুরু করে,

exec /usr/lib/autossh/autossh "$@"

আবার কোন পরিষেবা নয়। যেমন exec(আপনি এটি বাশ হ্যাকারদের উইকিতে ডাবল-চেক করতে পারেন ), এটি একটি শেল-বিল্টিন কমান্ড যা /usr/lib/autossh/autossh "$@"কোনও নতুন প্রক্রিয়া শুরু না করেই বর্তমান শেলটি নিম্নলিখিত কমান্ডের সাথে ( এই ক্ষেত্রে) প্রতিস্থাপন করে । সুতরাং, থামানোর একমাত্র উপায় autosshহ'ল কলিং স্ক্রিপ্টটিকে হত্যা করা

pkill -3 autossh

( -3 পতাকা ব্যবহারের গুরুত্ব নির্দেশ করার জন্য ডিভিলজয়েনকে ধন্যবাদ , নীচে দেখুন) ঘটনাক্রমে, সংযোগটি হত্যা করা কার্যকর হবে না, কারণ কলিং কমান্ড ( যেমন উপরের একটিটি) পুরানোটি বাদ পড়েছে তা বুঝতে পারার সাথে সাথেই নতুন সংযোগ শুরু হবে। ssh


1
আসলে আপনি -9 ছাড়া অটোশ মারা উচিত। যদি ইতিমধ্যে টানেলের মাধ্যমে কোনও সংযোগ তৈরি করা হয়ে থাকে তবে এটি পরিচালনা করতে কোনও শিশু sshd প্রক্রিয়া তৈরি করবে। -9 দিয়ে প্যারেন্ট অটোশাকে হত্যা করা sshd প্রক্রিয়াটিকে পিছনে ফেলে দেবে। Sshd প্রক্রিয়াটির সময় শেষ না হওয়া পর্যন্ত টানেলটি এখনও চলবে। আপনি যদি কিলটিতে ডিফল্ট সিগন্যাল (-3) ব্যবহার করেন তবে এটি নিখুঁতভাবে বন্ধ হয়ে যাবে এবং এর সাথে তৈরি এসএসডি প্রক্রিয়াটি নিয়ে যাবে।
ডিভিলজয়েন

হাই -৩ হ'ল ডিফল্ট কিল সিগন্যাল হিসাবে, আপনাকে প্রকৃতপক্ষে স্পষ্টভাবে -3 পাস করার দরকার নেই, আপনি এটি বাদ দিতে পারেন
অ্যান্ড্রেস আলকারাজ

@ আন্দ্রেস আলকারাজাজ আপনি কি সত্যিই এটি সম্পর্কে নিশ্চিত? SIGTERMএটি ডিফল্ট এবং এটি একটি 15SIGQUITহ'ল 3, superuser.com/questions/352147/ কি--15 does- kill-3- mean এবং en.wikedia.org/wiki/Kill_(command) - এছাড়াও, এফডাব্লুআইডাব্লু, আমি কেবল এটি পরীক্ষা করেছি এবং এটি বন্ধ করে দিচ্ছি না, সুতরাং SIGTERMব্যবহার করা যাবে না।
ড্যানিয়েল এফ

এবং pkillকোনও সিগন্যাল (= the default) ব্যবহার করেও শেষ হবে না autossh
ড্যানিয়েল এফ

@ ড্যানিয়েলফ আপনি ঠিক বলেছেন, আমি ডিভোয়েইন মন্তব্য থেকে "ডিফল্ট সিগন্যাল (-3)" বিভ্রান্ত হয়ে পড়েছি
আন্দ্রেস আলকারাজ

5

এর সাথে অটো ssh চালান:

AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh

এটি দিয়ে হত্যা:

kill pid

BTW

pkill -9 autossh একটি ভুল

-9নিশ্চিত করে তোলে যে প্রক্রিয়াটি সুদৃ .়ভাবে প্রস্থান করছে না, সুতরাং sshপ্রক্রিয়াটি autosshনিহত হওয়ার পরে প্রক্রিয়াটি এখনও রয়েছে

ছাড়াও -9এখনও খারাপ, আপনার যদি একাধিক টানেল চলমান থাকে তবে pkillসেগুলি সমস্তই মেরে ফেলবে

সঠিক উপায় হ'ল AUTOSSH_PIDFILEenv var সেট করতে হয় তবে killকেবল সেই পিড


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

4

প্রক্রিয়াটির জন্য অনুসন্ধান করুন:

পিএস অক্স | গ্রেপ এসএসএস

সেকন কলামটি পিআইডি নাম্বার

পিআইডি দ্বারা কিল প্রক্রিয়া :)

কিল -9 পিআইডি সংখ্যা

আপনার যদি রুট সুবিধাগুলি না থাকে তবে sudo ব্যবহার করুন ।


1

আমি জানি যে এটির উত্তর দেওয়া হয়েছে, তবে উপরের মন্তব্যের বিপরীতে, pkill -3 autosshএসএসডিডি চাইল্ড প্রক্রিয়াগুলি আমার জন্য হত্যা করে না।

আমি আমার .bashrcফাইলে এই ফাংশনটি ব্যবহার করি ।
মূলত, এটি অটোশকে --killযুক্তি যুক্ত করার মতো।

  if [ "$1" = "--kill" ]; then
    ps aux | 
    grep -P "(/usr/bin/ssh|/usr/lib/autossh/autossh)\s.*$2" |
    awk '{print $2}' |
    xargs -r kill
  else
    $(which autossh) "$@"
    echo "" # prevents line wrapping when you kill the ssh process
  fi

আপনি চালাতে which sshএবং which autosshআপনার সিস্টেমে পাথ পরীক্ষা করতে পারেন ।

যতক্ষণ না প্রথম যুক্তি না হয় ততক্ষণ --killএটি কেবল আরোগুলি অটোশকে পাশ করে।

এই স্ক্রিপ্টটি অটোশ & এসএসএস দৃষ্টান্তগুলিকে হত্যা করে। আপনি যদি পোর্ট ফরওয়ার্ডিং ব্যবহার করছেন তবে এটি গুরুত্বপূর্ণ কারণ কেবলমাত্র অটোশ উদাহরণটি মারা গেলে টানেলটি মারা যায় না, এটি / যদি শেষ পর্যন্ত সংযোগ বিচ্ছিন্ন হয় তবে এটি পুনরায় সংযোগ স্থাপন থেকে বিরত রাখে।

আপনি কেবলমাত্র নির্দিষ্ট টানেলগুলিকে মারতে অনুসন্ধান শব্দ (হোস্টের নাম) নির্দিষ্ট করতে পারেন।

autossh --kill dbserver1dbserver1 এর সাথে সংযোগগুলি কেবল
autossh --kill dbserverdbserver1, dbserver2, ইত্যাদিকে
autossh --kill dbserverহত্যা করবে সমস্ত অটোশ সংযোগকে হত্যা করবে

স্পষ্ট করে বলতে, এটি কেবলমাত্র এসএসএইচ সেশনগুলিকে অটোশ দ্বারা চালিত করা উচিত।

আপনি ps aux | grep sshঅটোশ এবং এসএসএস উভয় সেশন চলাকালীন দৌড়ালে আপনি দেখতে পাবেন যে অটোশ দ্বারা শুরু করাগুলি সম্পূর্ণ পথ (/ usr / bin / ssh এবং / usr / lib / autossh / autossh) ব্যবহার করে।
এই স্ক্রিপ্টটি কেবল স্পিকারিফসি পথ দিয়ে শুরু হওয়া প্রক্রিয়ার সাথে ফলাফলগুলির সাথে মেলে। আমি এটি করেছি কারণ আমি (এবং আমি বেশিরভাগ লোককে ধরে নিই) সাধারণত টাইপ করি sshএবং পুরো পাথটি না, যা এটি আমার সাধারণ এসএসস সেশনগুলি হত্যার হাত থেকে রক্ষা করে।

আশা করি এটি অন্যকে সহায়তা করবে।


সহজ কারণে $(which autossh)পরিবর্তে কোন বিশেষ কারণ autossh?
MestreLion
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.