রিমোট মেশিনে ssh করতে শেল স্ক্রিপ্ট লিখুন এবং কমান্ডগুলি কার্যকর করুন


99

আমার দুটি প্রশ্ন আছে:

  1. এখানে একাধিক রিমোট লিনাক্স মেশিন রয়েছে এবং আমার একটি শেল স্ক্রিপ্ট লিখতে হবে যা প্রতিটি মেশিনে একই কমান্ডের সমাপ্তি কার্যকর করবে। (কয়েকটি সুডোর অপারেশন সহ)। এটি কীভাবে শেল স্ক্রিপ্টিং ব্যবহার করে করা যায়?
  2. রিমোট মেশিনে শেশ করার সময়, যখন এটি আরএসএ ফিঙ্গারপ্রিন্ট প্রমাণীকরণের জন্য জিজ্ঞাসা করবে তখন কীভাবে পরিচালনা করতে হবে।

রিমোট মেশিনগুলি চালনার সময়ে তৈরি ভিএম হয় এবং আমার কেবল তাদের আইপি থাকে। সুতরাং, আমি সেই সমস্ত মেশিনে আগেই স্ক্রিপ্ট ফাইলটি স্থাপন করতে পারি না এবং আমার মেশিন থেকে এগুলি চালিত করি।


আমি দূরবর্তী লিনাক্স মেশিনগুলিতে এজেন্টের মতো প্রোগ্রাম স্থাপনের কথা ভাবি, যা নেটওয়ার্ক সকেট (বা এসএসএল) সংযোগের মাধ্যমে / সার্ভারে পর্যায়ক্রমিক পোলিংয়ের মাধ্যমে সার্ভারের সাথে সংযোগ বজায় রাখে।
র‌্যাপটার

আমাকে কেবল একবার কমান্ডের একটি সেট কার্যকর করতে হবে, তাই সংযোগ বজায় রাখা প্রয়োজন হয় না
বালানিভাশ

"কোনও লিপি নেই" এর অর্থ "কোনও ফাইল নেই", আমি মনে করি? আপনি কীভাবে প্রমাণীকরণ পরিচালনা করবেন? আপনি হোস্ট ফিঙ্গারপ্রিন্ট চেকিং অক্ষম করতে পারেন (আমার উত্তর দেখুন), তবে আপনি যদি কোনও পাবলিক / প্রাইভেট কী সেটআপ না করেন তবে আপনি একটি ইন্টারেক্টিভ পাসওয়ার্ড প্রম্পট পাবেন।
Andreas Fester

4
আন্দ্রেস: হ্যাঁ কোন ফাইল নেই। পাসডাব্লুড প্রম্পটটিexpect "প্রত্যাশা" ? হিসাবে ব্যবহার্য হিসাবে ব্যবহার করা যায়: মূল শব্দ: "`
বালানিভাশ

উত্তর:


142

এখানে একাধিক রিমোট লিনাক্স মেশিন রয়েছে এবং আমার একটি শেল স্ক্রিপ্ট লিখতে হবে যা প্রতিটি মেশিনে একই কমান্ডের সমাপ্তি কার্যকর করবে। (কয়েকটি সুডোর অপারেশন সহ)। এটি কীভাবে শেল স্ক্রিপ্টিং ব্যবহার করে করা যায়?

আপনি ssh দিয়ে এটি করতে পারেন, উদাহরণস্বরূপ:

#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
    ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done

রিমোট মেশিনে শেশ করার সময়, যখন এটি আরএসএ ফিঙ্গারপ্রিন্ট প্রমাণীকরণের জন্য জিজ্ঞাসা করবে তখন কীভাবে পরিচালনা করতে হবে।

আপনি StrictHostKeyChecking=nossh বিকল্প যোগ করতে পারেন :

ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"

এটি হোস্ট কী চেকটি অক্ষম করবে এবং স্বয়ংক্রিয়ভাবে হোস্ট কী পরিচিত হোস্টগুলির তালিকায় যুক্ত করবে। আপনি যদি হোস্টগুলি পরিচিত হোস্ট ফাইলটিতে যুক্ত করতে না চান তবে বিকল্পটি যুক্ত করুন -o UserKnownHostsFile=/dev/null

নোট করুন যে এটি নির্দিষ্ট সুরক্ষা চেকগুলি অক্ষম করে , উদাহরণস্বরূপ, মধ্য-আক্রমণে ম্যান-ইন-এর বিরুদ্ধে সুরক্ষা। এটি সুরক্ষা সংবেদনশীল পরিবেশে প্রয়োগ করা উচিত নয়।


স্ক্রিপ্টিং ভাষা কী? আপনি অবশ্যই যে sshকোনও শেল স্ক্রিপ্ট থেকে কল করতে পারেন
Andreas Fester

আপনি যদি একটি সিটিআরএল + সি করতে চান এবং একাধিক সার্ভারে ssh চালিয়ে যেতে চান তবে কী হবে? উদাহরণস্বরূপ, কিছু সার্ভারে পাসওয়ার্ড জিজ্ঞাসা করা হচ্ছে এবং অন্য কোনওটিতে না, তাই স্ক্রিপ্টটি আটকে যাবে। কোনও সিটিআরএল সি বা সিটিআরএল ডি করার জন্য -ও এর মতো কিছু করার উপায় আছে?
চানাফোট

5

এটি পরিচালনা করার বিভিন্ন উপায় রয়েছে।

আমার প্রিয় উপায় হ'ল দূরবর্তী সিস্টেমগুলিতে এবং আপনার নিজস্ব পাবলিক কীতে http://pamsshagentauth.sourceforge.net/ ইনস্টল করা । (এগুলি ভিএম-এ ইনস্টল করার কোনও উপায় বের করুন, কোনওভাবে আপনি একটি সম্পূর্ণ ইউনিক্স সিস্টেম ইনস্টল করেছেন, আরও কয়েকটি ফাইল কী?)

আপনার ssh এজেন্টটি ফরোয়ার্ড করাতে আপনি এখন পাসওয়ার্ড ছাড়াই প্রতিটি সিস্টেমে লগ ইন করতে পারেন।

এবং আরও ভাল, যে প্যাম মডিউলটি আপনার এসএসএস কী জুটির সাথে সুডোর জন্য প্রমাণীকরণ করবে যাতে আপনি প্রয়োজন মতো রুট (বা অন্য কোনও ব্যবহারকারীর) অধিকার নিয়ে চালাতে পারেন।

হোস্ট কী ইন্টারঅ্যাকশন সম্পর্কে আপনাকে চিন্তা করার দরকার নেই। যদি ইনপুটটি টার্মিনাল না হয় তবে ssh কেবলমাত্র এজেন্টদের ফরোয়ার্ড করার ক্ষমতা এবং পাসওয়ার্ড সহ প্রমাণীকরণের সীমাবদ্ধ করবে।

ক্যাপিস্ট্রানো এর মতো প্যাকেজগুলিও আপনার দেখতে হবে। অবশ্যই সেই সাইটের চারপাশে তাকান; এটির দূরবর্তী স্ক্রিপ্টিংয়ের একটি ভূমিকা রয়েছে।

স্বতন্ত্র স্ক্রিপ্ট লাইনগুলি এর মতো দেখতে পারে:

ssh remote-system-name command arguments ... # so, for exmaple,
ssh target.mycorp.net sudo puppet apply

5

Sshpass ব্যবহার করে ইনস্টল করুন, apt-get install sshpassতারপরে স্ক্রিপ্টটি সম্পাদনা করুন এবং আপনার লিনাক্স মেশিনগুলির আইপি, ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি যথাযথ ক্রমে রাখুন। তারপরে সেই স্ক্রিপ্টটি চালান। এটাই ! এই স্ক্রিপ্টটি সমস্ত সিস্টেমে ভিএলসি ইনস্টল করবে।

#!/bin/bash
SCRIPT="cd Desktop; pwd;  echo -e 'PASSWORD' | sudo -S apt-get install vlc"
HOSTS=("192.168.1.121" "192.168.1.122" "192.168.1.123")
USERNAMES=("username1" "username2" "username3")
PASSWORDS=("password1" "password2" "password3")
for i in ${!HOSTS[*]} ; do
     echo ${HOSTS[i]}
     SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
     sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"
done

4
স্ক্রিপ্টে প্রদর্শন এড়াতে পাসওয়ার্ড রফতানি করতে H SSHPASS ব্যবহার করুন। তথ্যসূত্র
হেক্সি

3

আমার জন্য এই কাজ।

সিনট্যাক্স: ssh -i pemfile.pem ব্যবহারকারীর নাম @ ip_address 'কমান্ড_1; আদেশ 2; আদেশ 3 '

#! /bin/bash

echo "########### connecting to server and run commands in sequence ###########"
ssh -i ~/.ssh/ec2_instance.pem ubuntu@ip_address 'touch a.txt; touch b.txt; sudo systemctl status tomcat.service'

2

আপনি যদি পার্ল কোড লিখতে সক্ষম হন তবে আপনার নেট :: ওপেনএসএসএইচ :: সমান্তরাল ব্যবহার বিবেচনা করা উচিত ।

আপনি প্রতিটি হোস্টে একটি ঘোষণামূলক পদ্ধতিতে চালিত করতে হবে এমন ক্রিয়াগুলি বর্ণনা করতে সক্ষম হবেন এবং মডিউলটি সমস্ত ভীতিজনক বিবরণটির যত্ন নেবে। চলমান কমান্ডগুলিও sudoসমর্থিত।


1

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

Ansible: https://www.ansible.com/
AWX: https://github.com/ansible/awx
Ansible টাওয়ার: বাণিজ্যিক পণ্য, আপনি সম্ভবত মুষ্টি ফ্রি এবং ওপেন সোর্স AWX অন্বেষণ করবে 15days বদলে মুক্ত-লেজ টাওয়ার এর


1

একাধিক দূরবর্তী লিনাক্স মেশিনে কমান্ড বা স্ক্রিপ্ট কার্যকর করার একাধিক উপায় রয়েছে। একটি সহজ ও সহজ উপায় হ'ল পিএসএসএইচ (প্যারালাল এসএস প্রোগ্রাম)

পিএসএসএইচ : বেশ কয়েকটি হোস্টের সমান্তরালে এসএসএস চালানোর জন্য একটি প্রোগ্রাম। এটি সমস্ত প্রক্রিয়াতে ইনপুট প্রেরণ, এসএস-তে পাসওয়ার্ড পাস করা, ফাইলগুলিতে আউটপুট সংরক্ষণ করা এবং সময় নির্ধারণের মতো বৈশিষ্ট্য সরবরাহ করে।

উদাহরণ ও ব্যবহার:

হোস্ট 1 এবং হোস্ট 2 এর সাথে সংযুক্ত করুন এবং প্রতিটি থেকে "হ্যালো, ওয়ার্ল্ড" মুদ্রণ করুন:

 pssh -i -H "host1 host2" echo "hello, world"

একাধিক সার্ভারে একটি স্ক্রিপ্টের মাধ্যমে কমান্ডগুলি চালান:

pssh -h hosts.txt -P -I<./commands.sh

হোস্ট কীগুলি পরীক্ষা করে বা সংরক্ষণ না করে কোনও কমান্ড ব্যবহার করুন এবং চালান:

pssh -h hostname_ip.txt -x '-q -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey -o PubkeyAuthentication=yes' -i  'uptime; hostname -f'

হোস্ট.টেক্সট ফাইলটিতে যদি প্রচুর পরিমাণে এন্ট্রি থাকে তবে ১০০ বলুন, তাহলে কমান্ডগুলি একই সাথে চালিত হয়েছে তা নিশ্চিত করতে প্যারালালিজম বিকল্পটিও 100 এ সেট করা যেতে পারে:

pssh -i -h hosts.txt -p 100 -t 0 sleep 10000

বিকল্পগুলি :
-আই: ইনপুট পড়ুন এবং প্রতিটি এসএসএস প্রক্রিয়াতে প্রেরণ করে। -পি
: pssh কে আউটপুট আসার সাথে সাথে প্রদর্শন করতে বলে।
-h: হোস্টের ফাইল পড়ে।
-এইচ: [ব্যবহারকারী @] হোস্ট [: পোর্ট] একক-হোস্টের জন্য।
-i: প্রতিটি হোস্ট - এক্স আর্গুমেন্টগুলি সম্পূর্ণ করার সাথে সাথে স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি প্রদর্শন করুন
: অতিরিক্ত এসএসএইচ কমান্ড-লাইন আর্গুমেন্টগুলি পাস করে
-o বিকল্প: কনফিগারেশন ফাইলে ব্যবহৃত বিন্যাসে বিকল্পগুলি দিতে ব্যবহার করা যেতে পারে ( ) (~ / .ssh / config)
-p সমান্তরালতা: প্রদত্ত সংখ্যাটি সর্বাধিক সংখ্যার সমবর্তী সংযোগ হিসাবে ব্যবহার করুন-
কিউবি মোড: সর্বাধিক সতর্কতা এবং ডায়াগনস্টিক বার্তাগুলিকে দমন করার কারণ দেয়।
-t: প্রদত্ত সেকেন্ডের সংখ্যার পরে সংযোগগুলি শেষ করে দিন। 0 এর অর্থ পিএসএস কোনও সংযোগের সময়সীমা ছাড়বে না

রিমোট মেশিনে শেশ করার সময়, যখন এটি আরএসএ ফিঙ্গারপ্রিন্ট প্রমাণীকরণের জন্য জিজ্ঞাসা করবে তখন কীভাবে পরিচালনা করতে হবে।

আরএসএ প্রমাণীকরণ প্রম্পট পরিচালনা করতে স্ট্রাইকহস্টকি চেকিং অক্ষম করুন।
-স স্ট্রিটহস্টকি চেকিং = না

সূত্র : man pssh


0

এটি আমার পক্ষে কাজ করেছে। আমি একটি ফাংশন করেছি। এটি আপনার শেল স্ক্রিপ্টে রাখুন:

sshcmd(){
    ssh $1@$2 $3
}

sshcmd USER HOST COMMAND

যদি আপনার একাধিক মেশিন থাকে তবে আপনি একই কমান্ডটি করতে চান তবে সে লাইনটি একটি আধা কোলন দিয়ে পুনরাবৃত্তি করবে। উদাহরণস্বরূপ, আপনার কাছে দুটি মেশিন থাকলে আপনি এটি করতে পারেন:

sshcmd USER HOST COMMAND ; sshcmd USER HOST COMMAND

কম্পিউটারের ব্যবহারকারীর সাথে ব্যবহারকারীকে প্রতিস্থাপন করুন। কম্পিউটারের নামের সাথে HOST প্রতিস্থাপন করুন। আপনি কম্পিউটারে যে আদেশটি করতে চান তা দিয়ে COMMAND প্রতিস্থাপন করুন।

আশাকরি এটা সাহায্য করবে!


-1

আপনি এই পদ্ধতির অনুসরণ করতে পারেন:

  • প্রত্যাশা স্ক্রিপ্ট ব্যবহার করে দূরবর্তী মেশিনে সংযুক্ত করুন । যদি আপনার মেশিন আশা করে না তবে আপনি এটি ডাউনলোড করতে পারেন। প্রত্যাশা স্ক্রিপ্ট লেখা খুব সহজ (গুগল এ সম্পর্কে সহায়তা পেতে)
  • সমস্ত ক্রিয়া যা শেল স্ক্রিপ্টে দূরবর্তী সার্ভারে করা উচিত action
  • লগইন সফল হয়ে গেলে রিমোট শেল স্ক্রিপ্টটি প্রত্যাশা স্ক্রিপ্ট থেকে শুরু করুন।

আমি যেমন প্রশ্নে উল্লেখ করেছি, দূরবর্তী মেশিনগুলি রান করার সময় তৈরি হয় এবং মেশিনে আমার আগে কোনও স্ক্রিপ্ট থাকতে পারে না।
বালানিভাশ

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