Ssh সার্ভারে লগ ইন করার জন্য শেল স্ক্রিপ্ট


29

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

set timeout 30
/usr/bin/ssh -p 8484 root@172.31.72.103
expect 
{
   "root@172.31.72.103's password" 
   {
      send "password\r" 
   }
}

এই কোডটি সঠিকভাবে চলছে না, এখনও এটি পাসওয়ার্ডের জন্য জিজ্ঞাসা করছে। কেউ দয়া করে এটি সমাধানে আমাকে সহায়তা করতে পারেন



উত্তর:


36

আমি একবার expectssh সার্ভারে লগ ইন করার জন্য একটি স্ক্রিপ্ট লিখেছিলাম (আপনার ক্ষেত্রে যেমন) এবং আমার স্ক্রিপ্টটি এরকম কিছু ছিল:

#!/usr/bin/expect

spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact

আমি মনে করি সম্ভবত এটি interactআপনার স্ক্রিপ্টে অনুপস্থিত।


এটি আমার জন্য একেবারে ভাল কাজ করছে এবং আমি এই জায়গায় আটকে আছি, ইন্টারেক্টিভটি প্রম্পট সহ ইন্টারেক্টিভ টার্মিনাল সরবরাহ করে, তবে আমি আরও কিছু পদক্ষেপ স্বয়ংক্রিয়ভাবে চেষ্টা করার চেষ্টা করছি cdএবং lsপাশাপাশি ফাইলের বিষয়বস্তুও পড়ছি। মিথস্ক্রিয়া পরে কি সম্ভব? দয়া করে উত্তর দিন
হ্যানসিমিথুন

@ হাসি আপনি lsলগইন করার পরে একটি আদেশ পাঠাতে পারেন । উদাহরণস্বরূপ পাসওয়ার্ড প্রেরণের পরে, expectকমান্ড প্রম্পট পাঠ্যটি দিয়ে একটি করুন (তারপরে আপনি লগ ইন করেছেন তা নিশ্চিত করে) send "ls\r"। এই সব আগে যায় interact
সাeedদন

প্রশ্নটি কিছুটা ভুল ছিল এবং এলএস করার পরে এবং বিষয়বস্তু পড়ার পরে দুঃখিত, আমি একই মুদ্রণ করতে সক্ষম হয়েছি। তবে কীভাবে এটি স্থানীয় মেশিন থেকে অ্যাক্সেস করার জন্য ssh সেশনের বাইরে চলতে পারে। রেফ: স্ট্যাকওভারফ্লো . com / প্রশ্নগুলি / ৩৩৩৪৪২২৪৩ / এক্সপেক্ট -স্ক্রিপ্ট- রিটার্ন- ভ্যালু । তবে আউটপুট আমার পক্ষে কাজ করছে না। আমার প্রশ্ন পোস্ট করা হয়েছে: স্ট্যাকওভারফ্লো . com / জিজ্ঞাসা / ৫১6284৪6565৫/২file_listলোকাল কমান্ড প্রম্পট থেকে অ্যাক্সেস পেতে আমার প্রস্থান করার দরকার আছে
হ্যান্সিমিথুন

31

আপনি এটিকে ভুল পথে চালাচ্ছেন। আপনি যা করতে চান তা হ'ল পাসওয়ার্ডহীন এসএস-কী জুড়ি তৈরি করা এবং তারপরে (যতক্ষণ না সার্ভার আরএসএ কী প্রমাণীকরণ সমর্থন করে) আপনি সবার জন্য একটি পাসওয়ার্ড টাইপ না করেই প্রবেশ করতে পারেন। এটি আপনার সুরক্ষা ঝুঁকি যদি আপনার ব্যক্তিগত কীটি কোথাও সংরক্ষণ করা হয় যা এটি চুরি হতে পারে।

এই পদক্ষেপগুলি অনুসরণ করুন:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Returnপাসফ্রেজের জন্য অনুরোধ করা হলে টিপুন
  5. Returnনিশ্চিত করতে দ্বিতীয়বার টিপুন ।

আপনার ~/.sshডিরেক্টরিতে এখন দুটি ফাইল থাকবে mysshkey.pubএবং mysshkeymysshkey.pubআপনার সর্বজনীন কী, এটি রিমোট সার্ভারগুলিতে রাখা নিরাপদ। mysshkeyআপনার ব্যক্তিগত পাসওয়ার্ডহীন কী, এটি দূরবর্তী সার্ভারগুলিতে রাখা নিরাপদ নয় (বা অন্য কোথাও অন্য কোনও অনুলিপি পেতে পারে)।

আপনি যে সার্ভারে এসএসএইচ করতে চান তাতে:

  1. রিমোট সার্ভারে লগইন করুন
  2. mkdir -p ~/.ssh
  3. কপি করুন এবং বিষয়বস্তু পেস্ট mysshkey.pubমধ্যে~/.ssh/authorized_keys
  4. নিশ্চিত করুন ~/.ssh/authorized_keysঅর্থাৎ chmod'ঘ600

এখন, আপনার স্থানীয় মেশিনে এটি কার্যকর করতে আপনি নিম্নলিখিত কমান্ডটি চালাচ্ছেন:

ssh -i ~/.ssh/mysshkey <remote_server_ip>

এবং আপনি কোনও পাসওয়ার্ডের জন্য অনুরোধ না করে লগ ইন করবেন।

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


2
আমি ডিএসএর চেয়ে আরএসএ কী ব্যবহার করব। তবে তা বাদে সম্পূর্ণ সম্মত।
glglgl

12
কখনও কখনও আপনি দূরবর্তী হোস্ট, যেমন নেটওয়ার্ক অ্যাপ্লিকেশনগুলিতে কী যুক্ত করতে পারবেন না।
ডার্কহার্ট

1
আমি এই চেষ্টা করেছিলাম। ssh এখনও একটি পাসওয়ার্ড চাইছে। আপনার কি বিশেষভাবে কোনও আইপি ঠিকানা দিতে হবে? আমি <user> @ <domain-name> এবং কেবলমাত্র ডোমেন নাম উভয় দিয়েই এটি চেষ্টা করেছি।
জে বিয়েনভেনু

এই আদেশটি অনেক যুক্তি দিয়েছিল? (3 ধাপের জন্য)
জোসেফ আস্ট্রাহান 8:58

আমাকে ssh-keygen -t dsa এ পরিবর্তন করতে হয়েছিল এবং এর পরিবর্তে ম্যানুয়ালি ফাইলের অবস্থান লিখতে হয়েছিল।
জোসেফ আস্ট্রাহান

20

ডেবিয়ান-ভিত্তিক বিতরণগুলিতে, sshpassপ্যাকেজটি আপনি যা চান তা করার একটি সহজ উপায় সরবরাহ করে। প্যাকেজটি অন্যান্য অনেক জনপ্রিয় বিতরণের জন্য উপলব্ধ। আপনাকে প্রথমে এটি সেট আপ করতে হবে:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

তারপরে এসএসএইচ কমান্ডটি এই জাতীয় স্ক্রিপ্ট থেকে অনুরোধ করুন:

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 root@172.31.72.103

এটি আরও নমনীয়তা সরবরাহ করে, যেমন আপনি যদি সমাধান ব্যবহার না করে আলাদা লোকেল ব্যবহার করেন বা পাসওয়ার্ড পরিবর্তন করতে চান expect


7

প্রথমে এসপাস ইনস্টল করুন sudo apt-get install sshpass

তারপরে .bashrc ফাইলটিতে একটি উপকরণ তৈরি করুন

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'

এখন দ্বারা আপনার পরিবর্তিত .bashrc ফাইলটি পুনরায় লোড করুন source ~/.bashrc

আপনি এখন সম্পন্ন হয়েছে।

এখন আপনি sshLoginটার্মিনালে উপরের তৈরি উরফ ব্যবহার করে ssh চালাতে পারবেন ।



2

একটি হ্যাশ কী তৈরি করতে এবং এটি আপনার পিসিতে সংরক্ষণ করার জন্য আপনার যা দরকার তা সব

লিখো

ssh-keygen -t rsa -b 4096 # just press Enter till the end

তারপরে প্রবেশ করুন

ssh-copy-id <user>@<server>

তারপরে সাধারণত ব্যবহার করে লগইন করুন

ssh <user>@<server>

এখন আপনার পাসওয়ার্ডের দরকার নেই

দ্রষ্টব্য: সাধারণ পাঠ্যে আপনার পাসওয়ার্ড সংরক্ষণ করা বিপজ্জনক

এই পদ্ধতিটি 4096 দৈর্ঘ্যের জনসাধারণের কী দিয়ে আপনার পাসওয়ার্ডটির একটি হ্যাশ মান তৈরি করছে যা খুব সুরক্ষিত।


1
এটি এই উত্তরের পুনরাবৃত্তি বলে মনে হয় ।
রোয়াইমা

হ্যাঁ, তবে এটি অবিশ্বাস্যরূপে কার্যকর ssh-copy-idকমান্ডের পরামর্শ দেয় , যা অন্য কেউ উল্লেখ করেনি । আমি এটা জন্য upvoting করছি।
হু ওয়াল্টার্স

1

এসএসএইচ পাসওয়ার্ডহীন লগইন 5 সহজ পদক্ষেপে এসএসএইচ কীজেন ব্যবহার করে :

পরিবেশ সেটআপ: এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 1: প্রমাণীকরণ এসএসএইচ-কেজেন কীগুলি চালু - (192.168.0.12)
সার্ভারে প্রথমে 192.168.0.12 ব্যবহারকারীর সাথে লগইন করুন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে একজোড়া পাবলিক কী তৈরি করুন।

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

পদক্ষেপ 2: 192.168.0.11 তে .ssh ডিরেক্টরি তৈরি করুন
নিম্নলিখিত কমান্ডটি ব্যবহার করে এর অধীনে .ssh ডিরেক্টরি তৈরি করতে 192.168.0.12 সার্ভারটি সংযোগ করতে সার্ভার থেকে এসএসএইচ ব্যবহার করুন।

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

পদক্ষেপ 3: উত্পাদিত সর্বজনীন কীগুলিতে আপলোড করুন - 192.168.0.11
সার্ভার থেকে এসএসএইচ ব্যবহার করুন 192.168.0.12 এবং সার্ভারে নতুন উত্পাদিত পাবলিক কী (id_rsa.pub) .sshফাইলের নাম হিসাবে ফাইল ডিরেক্টরি হিসাবে 192.168.0.11 এ আপলোড করুন _

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

পদক্ষেপ 4: অনুমতিগুলি সেট করুন - 192.168.0.11
সার্ভারে বিভিন্ন এসএসএইচ সংস্করণের কারণে আমাদের .sshডিরেক্টরি এবং authorized_keysফাইলের অনুমতি সেট করতে হবে।

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

পদক্ষেপ 5: 192.168.0.12 থেকে 192.168.0.11 এ পাসওয়ার্ড ছাড়াই সার্ভার
এখন থেকে আমরা 192.168.0.11 সার্ভার থেকে শীনা ব্যবহারকারী হিসাবে 192.168.0.12 পাসওয়ার্ড ছাড়াই টেকমিন্ট ব্যবহারকারী হিসাবে লগইন করতে পারি।

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


ধন্যবাদ ... এটি আমার পক্ষে কাজ করেছিল, ৪ র্থ পদক্ষেপ ব্যতীত আমি একটি নাটকীয় "সতর্কতা" পেয়েছি: "অপরিশোধিত ব্যক্তিগত কী ফাইল! ... ... /। Ssh / id_rsa 'খুব খোলা আছে ... ব্যক্তিগত কী হবে উপেক্ষিত ... খারাপ অনুমতি "। আমি chmod 700 id_rsaস্থানীয় ডিরেক্টরিতে .ssh (ক্লায়েন্ট, উদাহরণস্বরূপ 192.168.0.12 সার্ভারে) সার্ভারে করেছি: সমস্যা সমাধান হয়েছে
মাইক রডেন্ট


1

ইতিমধ্যে অন্যান্য উত্তরে বর্ণিত হিসাবে, আমি এটি ব্যবহার করি sshpassতবে আমি readঅস্থায়ী পরিবেশের পরিবর্তনশীলতে আমার পাসওয়ার্ড সংরক্ষণ করতে কমান্ডের সাথে এটি একত্রিত করি । এইভাবে আমার পাসওয়ার্ডটি পরিষ্কারভাবে কোথাও লেখা হয় না। এখানে আমি ব্যবহার করি একটি লাইন কমান্ড:

read -s PASS; sshpass -p $PASS ssh <user>@<host adress>

এর পরে আপনাকে আপনার পাসওয়ার্ড প্রবেশ করতে হবে (স্ক্রিনে কিছুই প্রদর্শিত হবে না) এবং তারপরে এন্টার টিপলে সংযোগটি খুলবে।


0

আমি সম্প্রতি এটি করেছি, এটি আপনাকে সাহায্য করতে পারে:

sshpass -p 'password' username@ipaddress

যদি এটি কাজ না করে তবে আপনি যে মেশিনের সাথে সংযোগ করতে চান তার অন্যান্য কী তৈরি করতে হবে

ssh-keygen

এটি প্রাইভেট এবং পাবলিক কী তৈরি করবে এবং আপনাকে একটি অবস্থানের জন্য জিজ্ঞাসা করবে, খালি ছেড়ে দেবে এটি ডিএসএফ ফোল্ডারে কীগুলি সংরক্ষণ করবে ডিফল্টরূপে এটি আপনাকে পাসফ্রেজের জন্য জিজ্ঞাসা করবে, আপনি এটি এসএসএস ফোল্ডারেও খালি রাখতে পারবেন এবং পরিবর্তনটি পরিবর্তন করতে পারবেন 'অনুমোদিত_ কিজ' এর সর্বজনীন কী নাম

cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username

এটি এখন তালিকায় ব্যবহারকারীকে যুক্ত করবে হোম ডিরেক্টরিতে যান এবং অনুমতি দিন এবং এসএসডি পরিষেবাদি পুনরায় চালু করবেন

chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
sudo service sshd restart

এখন আপনাকে সেই স্থানে প্রাইভেট কীটি সেই স্থানে নিয়ে যেতে হবে যেখানে আপনি ssh কমান্ড চালাচ্ছেন, তারপরে আপনি এর সাথে সংযোগ করতে পারবেন

sshpass -p 'password' ssh -i id_rsa username@ip

এমনকি যদি এটি কাজ করে না তবে ভিএম এডিটর সহ / ইত্যাদি / এসএসএস খুলুন sshd_config এ যান কিনা এটি পরীক্ষা করুন যদি হ্যাঙ্কে পরিবর্তিত হয় না, এসএসডি সার্ভিস পুনরায় চালু করুন এবং তারপরে চেষ্টা করুন, এটি অবশ্যই কাজ করবে ।


0

প্রথম যুক্তির নাম হোস্টনাম এবং দ্বিতীয়টি হচ্ছে পাসওয়ার্ড।

     #!/usr/bin/expect
     set pass [lindex $argv 1]
     set host [lindex $argv 0]
     spawn ssh -t root@$host echo Hello
     expect "*assword: "
     send "$pass\n";
     interact

সম্পাদন: ./script.expect

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