লগইন সংখ্যা সীমাবদ্ধ করতে স্ক্রিপ্টে বাশ করুন


12

আমার সংস্থার প্রয়োজনীয়তা রয়েছে যে আমার কাছে একটি সার্ভার অ্যাপ্লিকেশন চলছে, যা সমস্ত ব্যবহারকারী পুট্টি টার্মিনালের মাধ্যমে এটি অ্যাক্সেস করে। আমি একটি শেল স্ক্রিপ্ট লিখতে চাই যে কেবল 20 পুট্টি টার্মিনাল খোলা উচিত। যদি 21 তম টার্মিনালটি খোলা থাকে তবে আমি অবিলম্বে সেই টার্মিনালটি বন্ধ করতে চাই।

আমি কীভাবে এটি অর্জন করতে পারি?

আমাকে সাহায্য করুন.


3
MaxSessionsক্ষেত্রের সার্ভারে
এসএসএসে

2
যদি আপনার কর্পোরেশনের 20 টি সর্বাধিক সেশনের নীতি থাকে এবং ডিফল্ট 10 হয় (সর্বাধিক ভোট দেওয়া উত্তর বলে) তবে আপনার সংস্থা কেন অনুমতিযোগ্য সেশনের সংখ্যা> 20 এ বাড়িয়েছে /etc/sshd_config, বা এটি উবুন্টু বাগ?
WinEunuuchs2Unix

যদি 21 তম টার্মিনালটি খোলা থাকে তবে আমি অবিলম্বে সেই টার্মিনালটি বন্ধ করতে চাই তাই 20 টি প্রথম সংযোগ সার্ভারকে অনির্দিষ্টকালের জন্য হগ করতে পারে?
xenoid

উত্তর:


24

/etc/sshd_configসার্ভারে আপনার সম্পাদনা করুন এবং লাইনটি পরিবর্তন করুন:

#MaxSessions 10

প্রতি

MaxSessions 20

দেখুন man sshd_config:

 MaxSessions
         Specifies the maximum number of open shell, login or subsystem
         (e.g. sftp) sessions permitted per network connection.  Multiple
         sessions may be established by clients that support connection
         multiplexing.  Setting MaxSessions to 1 will effectively disable
         session multiplexing, whereas setting it to 0 will prevent all
         shell, login and subsystem sessions while still permitting for-
         warding.  The default is 10.

হ্যাঁ এটির কাজ, উত্তর হিসাবে যুক্ত করতে কিছুটা দেরি।

2
আমি কিছুক্ষণের জন্য আমার পুরানো ল্যাপটপের একটিতে এসএসএসএচ জিনিস সেটআপ করার অর্থ করছি। ম্যান পেজটি কি বলছে যে ডিফল্টরূপে কেবলমাত্র 10 জন সার্ভারে সাইন ইন করতে পারেন? এমনকি ৮০ এর দশকে ফিরেও আমরা একশো ব্যবহারকারীর 2 মেগাবাইট র‌্যাম সহ একটি আইবিএম এস / 36 মিনি কম্পিউটারে সাইন ইন করতে পারি।
WinEunuuchs2Unix

2
আপনি এসএসএইচ সংযোগের মধ্যে সেশনগুলির সাথে খোলা টার্মিনালগুলিতে (ওপি দেখুন) বিভ্রান্তিকর সেশনগুলি করছেন। আপনি যে সেটিংটি উল্লেখ করেছেন সেটি হ'ল একক ssh- সংযোগ দ্বারা কতগুলি "সাব-সংযোগগুলি" অনুমোদিত about সুতরাং 30 "ssh" কমান্ড চালানো এমনকি কোনও সমস্যা নয় MaxSessions 20। উল্লিখিত সেশনগুলিতে একই সংযোগ ব্যবহার করে পোর্ট-ফরওয়ার্ডিং (এবং এমনকি একাধিক শেল খোলা থাকার মতো) সম্পর্কে রয়েছে, সিস্টেমে লগইনের সংখ্যা সম্পর্কে নয়।
Allo

আপনি কি ওপি থেকে এই তথ্যটি পেয়েছেন?
জর্জ উদোসেন

1
@ অ্যালো এখানে সঠিক, ম্যাকসেশনস একক টিসিপি সংযোগের মাধ্যমে সেশন মাল্টিপ্লেক্সিংকে বোঝায়। যদি না ওপির সমস্ত ব্যবহারকারী সার্ভারের সাথে একক টিসিপি সংযোগ ভাগ করে নেওয়ার জন্য অদ্ভুত কাজ না করেন তবে এই সীমাটি তাদের প্রভাব ফেলবে না। আমি কেবল একটি সার্ভারে কম ম্যাকসেশনস সীমা নির্ধারণ করে এবং এটিতে এর সাথে অনেকগুলি সংযোগের চেয়ে বেশি খোলার মাধ্যমে আমি নিজে এটি যাচাই করেছি।
জো লি-ময়েত

5

জর্জের সমাধান ঠিকঠাক কাজ করে তবে আপনি বাশ স্ক্রিপ্ট চেয়েছিলেন ...

তাই অন্য পরিস্থিতিতে জন্য এই এক বিবেচনা যখন কোনো বিকল্প মত হল MaxSessionsএর sshd, তাহলে আপনি ভালো কিছু ব্যবহার করতে পারেন:

if [ "$(pgrep -cx processName)" -gt 20 ]; then pkill -xn processName; fi; 

যা pkill -nএর নতুনতম ঘটনাটিকে হত্যা করবে processName

এই বিশেষ পরিস্থিতির সঠিক সমাধান হ'ল জর্জের উত্তর।


এটি কি উপ-প্রক্রিয়াগুলিও আটকাতে পারে না?
রন জন

হ্যাঁ এর ফলে উপ-প্রক্রিয়াটিকেও হত্যা করা হয়।
রাভেক্সিনা

2
তারপরে - বাশ দেওয়া হয়েছে যে প্রচুর সাব-প্রসেসকে কাঁটাচামচ করে এবং তারা ব্যবহারকারীদের সীমাবদ্ধ করতে চায়, প্রক্রিয়া নয় - এটি কোনও কার্যকর উত্তর বলে মনে হয় না।
রন জন

1
@ রনজোহন এটি আপনার প্রয়োজনীয় প্রশ্নের সাথে সম্পর্কিত একটি দরকারী উত্তর ছিল (এমন একটি স্ক্রিপ্ট যা তত্ক্ষণাত একটি প্রক্রিয়া বন্ধ করে দেয়) এবং অনুসন্ধান ইঞ্জিন থেকে আসা অন্যান্য ব্যবহারকারীদের (শিরোনামের একটি সাধারণ উত্তর) আপনি প্রশ্ন সম্পাদনা না করা পর্যন্ত।
রাভেক্সিনা

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

4

আমি সম্প্রসারিত এবং পরীক্ষা করার সিদ্ধান্ত নিয়েছে করেছি Ravexina এর ধারণা । এটি কার্যকর হয় এবং আপনি যদি প্রতিষ্ঠিত এসএসএস সংযোগের সংখ্যা একেবারেই সীমাবদ্ধ রাখতে চান তবে এটি কার্যকর।

প্রথমে আমি খুঁজে পেলাম যে যখন কোনও সংযোগ ছাড়াই ssh ডিমন চলমান থাকে তখন একটি sshdপ্রক্রিয়া থাকে। প্রতিটি নতুন সংযোগের জন্য দুটি নতুন sshdপ্রক্রিয়া তৈরি করা হয়। সুতরাং আপনি যদি 20 সংযোগের সীমা চান তবে প্রান্তিকের পরিবর্তে 20 এর পরিবর্তে 41 (1 + 2x20) হওয়া উচিত ।

তারপরে আমি একটি এক্সিকিউটেবল ফাইল তৈরি করেছি, যার নাম দেওয়া আছে , যা নীচের মত দেখাচ্ছে:/usr/local/bin/limit-sshd

#!/bin/sh
if [ "$(pgrep -cx sshd)" -gt 7 ]
then
    echo '\nThe limit was reached!\n'
    pkill -xn sshd
fi
  • এখানে প্রান্তিকতা যথাক্রমে 7, যথাক্রমে কেবল 3 সংযোগ স্থাপন করা যেতে পারে এবং বাকিগুলি বাদ দেওয়া হবে।

অবশেষে আমি নিম্নলিখিত নির্দেশাবলী এতে যুক্ত করেছি /etc/ssh/sshd_config:

ForceCommand /usr/local/bin/limit-sshd; $SHELL
  • ভেরিয়েবলটি $SHELLডিফল্ট ব্যবহারকারীর শেলটি কার্যকর করে।
  • একটি অবাঞ্ছিত প্রভাব হ'ল অভিবাদন বার্তা আর উপলভ্য নয়।
  • Ssh ডিমন পুনরায় চালু করতে ভুলবেন না: sudo systemctl restart sshd.service

এটি কীভাবে কাজ করে তা এখানে ( অ্যানিমেটেড ডেমো দেখতে চিত্রটিতে ক্লিক করুন ):

এখানে চিত্র বর্ণনা লিখুন

আরও, আমি বুঝতে পেরেছিলাম যে আমাদের স্ক্রিপ্টটি এভাবে পরিবর্তন করা হলে আমাদের কিছু মারার দরকার নেই:

#!/bin/sh
if [ "$(pgrep -cx sshd)" -gt 7 ]
then
    echo '\nThe limit was reached!\n'
    exit # This line is not mandatory
else
    eval "$SHELL"
fi

এবং যথাক্রমে /etc/ssh/sshd_configএইভাবে:

ForceCommand /usr/local/bin/limit-sshd

2

প্রশ্নটি পরিষ্কার নয়। আমাকে প্রথমে বলি আমি এটি কীভাবে বুঝতে পারি এবং কোনভাবে, আইএমও, এটি জিজ্ঞাসা করা উচিত:

আমাদের স্থানীয় নেটওয়ার্ক রয়েছে যেখানে একটি সার্ভার একটি নির্দিষ্ট অ্যাপ্লিকেশন সরবরাহ করে। আমাদের টিমটি পিটিটিওয়াই ব্যবহার করে তাদের কম্পিউটার থেকে সার্ভারে এসএসএস সংযোগের মাধ্যমে এই অ্যাপ্লিকেশনটি অ্যাক্সেস করে। প্রতিটি দলের সদস্যের নিজস্ব ব্যবহারকারী অ্যাকাউন্ট রয়েছে যা এসএসএস সংযোগ স্থাপন করতে ব্যবহৃত হয় ( বা হতে পারে: সমস্ত দলের সদস্য একটি সাধারণ ব্যবহারকারী অ্যাকাউন্ট ব্যবহার করেন)।

টিম সদস্যরা অন্য কোনও উদ্দেশ্যে সার্ভারটি ব্যবহার করে না এবং আমরা তাদের এসএসএস সংযোগের সংখ্যা 20 এর মধ্যে সীমাবদ্ধ রাখতে চাই, নির্দিষ্ট ব্যবহারকারী দ্বারা এখনও ( বা সম্ভবত: 20 সংযোগ) কত সংযোগ স্থাপন করা হয়েছে তা বিবেচনা করেই ।

যে ব্যাখ্যা সঠিক হলে প্রয়োজনীয়তা পূরণে সম্ভবত একটি সঠিক ভাবে তৈরি করা ব্যবহারকারী গোষ্ঠী , তাহলে সেই গ্রুপে সকল ব্যবহারকারী অ্যাকাউন্টের যোগ করতে পারেন এবং সংখ্যা সীমিত maxlogins মাধ্যমে /etc/security/limits.conf

  1. the-app-maxloginsগ্রুপ আইডি সহ উদাহরণস্বরূপ বলা হয় একটি গোষ্ঠী তৈরি করুন 10 000:

    sudo groupadd -g 10000 the-app-maxlogins
  2. ব্যবহারকারীদের সেই গোষ্ঠীতে যুক্ত করুন sudo adduser <user> <group>:

    for user in "user1" "user2" "user3"; do sudo adduser "$user" the-app-maxlogins; done
  3. পাশে লাইন যোগ করুন /etc/security/limits.confথেকে সীমিত এর maxlogins সমগ্র গ্রুপ :

    %the-app-maxlogins      -       maxlogins       20

    বা গোষ্ঠীর ব্যবহারকারী প্রতি সর্বাধিক লগইন সংখ্যা সীমাবদ্ধ করতে নিম্নলিখিত লাইনটি যুক্ত করুন :

    @the-app-maxlogins      -       maxlogins       20
  4. /etc/ssh/sshd_configএই গোষ্ঠীর সেশন মাল্টিপ্লেক্সিং অক্ষম করতে ফাইলের নীচে (!) এর নীচের লাইনগুলি সম্পাদনা করুন এবং যুক্ত করুন (সম্ভবত এটি সেই ক্ষেত্রে বাধ্যতামূলক নয়):

    Match Group the-app-maxlogins
        MaxSessions 1
    

এই সমাধানটি ssh বা tty এর মাধ্যমে প্রভাবিত ব্যবহারকারীদের লগইন সংখ্যা সীমাবদ্ধ করবে। আপনি যদি এটি কোনও নির্দিষ্ট ব্যবহারকারীর জন্য কোনও গোষ্ঠীর জন্য না প্রয়োগ করতে চান তবে কেবল অনুসরণ হিসাবে একটি লাইন যুক্ত করুন limits.confবা ডিরেক্টরিতে এটি একটি পৃথক .confফাইলে রাখুন /etc/security/limits.d/:

username      -       maxlogins       20

নির্দেশ প্রকৃত অর্থ সরল ব্যাখ্যা MaxSessionsপ্রদান করা হয় এই উত্তরটি । বর্তমান উত্তরের মূল উত্স একই এল ও ইউ এর প্রশ্নের অধীনে অন্য উত্তর

আমার অন্য উত্তরটি , কোনও উপায়ে কাজটি করতে পারে তবে এটি সত্য সমাধানের চেয়ে এক ধরণের মজা।

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