আমি কীভাবে বার বার আমার পাসওয়ার্ড টাইপ না করে সার্ভারের তালিকায় আমার এসএসএইচ পাব কীটি প্রচার করতে পারি?


26

আমাকে সম্প্রতি সার্ভারের তালিকায় ব্যবহারকারীর নাম / পাসওয়ার্ড অ্যাক্সেস দেওয়া হয়েছিল এবং এই সার্ভারগুলিতে আমার এসএসএইচ পাবলিক কী প্রচার করতে চাই, যাতে আমি আরও সহজে লগইন করতে পারি।

যাতে এটি স্পষ্ট:

  • রিমোট সার্ভারগুলিতে এমন কোনও পূর্ব-বিদ্যমান পাবলিক কী নেই যা আমি এটি স্বয়ংক্রিয় করতে ব্যবহার করতে পারি
  • আমি এই সার্ভারগুলিতে লগইন করার প্রথম বারের মতো এটি গঠন করে এবং এগুলি অ্যাক্সেস করার জন্য আমার ক্রমাগত শংসাপত্রগুলি টাইপ করতে হবে না like
  • এছাড়াও আমি আমার পাসওয়ার্ডটি বার বার ssh-copy-idলুপের জন্য টাইপ করতে চাই না ।

1
এটি কি সমস্ত সার্ভারের জন্য একই ব্যবহারকারীর নাম এবং পাসওয়ার্ড?
রোয়াইমা

@ রাইমা - হ্যাঁ! এই বিশদটি আমাকে পাশাপাশি অবাক করেছে, তবে এই নির্দিষ্ট ডেটা সেন্টার সেটআপটি এটিই এবং তারা এটি করে how
slm

@ অট-- - ডাব্লু কিউ ডাবল চেক করুন আমি স্পষ্টভাবে বলেছি যে আমি ssh-copy-idআমার পাসওয়ার্ডটি বারবার পাম্প করে লুপের জন্য কিছু করতে চাই না ।
slm


2
এটি কনফিগার পরিচালনার জন্য উপযুক্ত ব্যবহারের কেস case পুতুল, শেফ, জবাবদিহি বা লবণের দিকে তাকান।
স্পুডার

উত্তর:


31

বরং টাইপ চেয়ে আপনার পাসওয়ার্ড একাধিক বার আপনি ব্যবহার করতে পারেন psshএবং তার -Aএকবার এটি জন্য প্রম্পট স্যুইচ করুন, এবং তারপর একটি তালিকাতে সকল সার্ভারে পাসওয়ার্ড ভোজন।

দ্রষ্টব্য: এই পদ্ধতিটি ব্যবহার আপনাকে ব্যবহার করার অনুমতি দেয় না ssh-copy-id, সুতরাং আপনার দূরবর্তী অ্যাকাউন্টের ফাইলে আপনার এসএসএইচ পাব কী ফাইল সংযুক্ত করার জন্য আপনার নিজের পদ্ধতিটি রোল করতে ~/.ssh/authorized_keysহবে।

উদাহরণ

এখানে একটি উদাহরণ যা কাজটি করে:

$ cat ~/.ssh/my_id_rsa.pub                    \
    | pssh -h ips.txt -l remoteuser -A -I -i  \
    '                                         \
      umask 077;                              \
      mkdir -p ~/.ssh;                        \
      afile=~/.ssh/authorized_keys;           \
      cat - >> $afile;                        \
      sort -u $afile -o $afile                \
    '
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 23:03:58 [SUCCESS] 10.252.1.1
[2] 23:03:58 [SUCCESS] 10.252.1.2
[3] 23:03:58 [SUCCESS] 10.252.1.3
[4] 23:03:58 [SUCCESS] 10.252.1.10
[5] 23:03:58 [SUCCESS] 10.252.1.5
[6] 23:03:58 [SUCCESS] 10.252.1.6
[7] 23:03:58 [SUCCESS] 10.252.1.9
[8] 23:03:59 [SUCCESS] 10.252.1.8
[9] 23:03:59 [SUCCESS] 10.252.1.7

উপরের লিপিটি সাধারণত এর মতো কাঠামোযুক্ত:

$ cat <pubkey> | pssh -h <ip file> -l <remote user> -A -I -i '...cmds to add pubkey...'

উচ্চ স্তরের psshবিশদ

  • cat <pubkey> সর্বজনীন কী ফাইলটি আউটপুট করে pssh
  • pssh-ISTDIN এর মাধ্যমে ডেটা নিবিষ্ট করতে স্যুইচ ব্যবহার করে
  • -l <remote user> রিমোট সার্ভারের অ্যাকাউন্ট (আমরা ধরে নিচ্ছি যে আইপি ফাইলের সার্ভারগুলিতে আপনার একই ব্যবহারকারীর নাম রয়েছে)
  • -Aবলে psshআপনার পাসওয়ার্ড চাইতে এবং তারপর সব সার্ভারের জন্য পুনরায় এটিকে ব্যবহার এটি সাথে সংযোগ করে থেকে
  • -ipsshকোনও আউটপুট এটি ফাইলগুলিতে সংরক্ষণের পরিবর্তে STDOUT এ প্রেরণ করতে বলে (এটির পূর্বনির্ধারিত আচরণ)
  • '...cmds to add pubkey...'- এটি যা ঘটছে তার মধ্যে সবচেয়ে জটিল অংশ, তাই আমি এটিকে নিজেই ভেঙে দেব (নীচে দেখুন)

কমান্ডগুলি দূরবর্তী সার্ভারে চলছে

এগুলি হ'ল আদেশগুলি যা psshপ্রতিটি সার্ভারে চলবে:

'                                         \
  umask 077;                              \
  mkdir -p ~/.ssh;                        \
  afile=~/.ssh/authorized_keys;           \
  cat - >> $afile;                        \
  sort -u $afile -o $afile                \
'
ক্রমানুসারে:
  • রিমোট ব্যবহারকারীর উমাস্ককে 077 এ সেট করুন, এটি এমন কোনও ডিরেক্টরি বা ফাইল তৈরি করতে যাচ্ছি, সেই অনুযায়ী তার অনুমতি সেট করা থাকবে:

    $ ls -ld ~/.ssh ~/.ssh/authorized_keys
    drwx------ 2 remoteuser remoteuser 4096 May 21 22:58 /home/remoteuser/.ssh
    -rw------- 1 remoteuser remoteuser  771 May 21 23:03 /home/remoteuser/.ssh/authorized_keys
    
  • ডিরেক্টরি তৈরি করুন ~/.sshএবং যদি ইতিমধ্যে সেখানে থাকে তবে আমাদের সতর্কতা উপেক্ষা করুন

  • $afileঅনুমোদিত_কিগুলি ফাইলের পথ সহ একটি ভেরিয়েবল সেট করুন
  • cat - >> $afile - এসটিডিআইএন থেকে ইনপুট নিন এবং অনুমোদিত_কিজি ফাইলগুলিতে সংযোজন করুন
  • sort -u $afile -o $afile - স্বতন্ত্রভাবে অনুমোদিত_কিজি ফাইলগুলি বাছাই করে এবং এটি সংরক্ষণ করে

দ্রষ্টব্য: শেষ বিটটি হ'ল কেসটি হ্যান্ডল করে যেখানে আপনি একই সার্ভারের বিরুদ্ধে উপরের একাধিকবার চালিত হন। এটি আপনার পাবিকে একাধিকবার সংযোজন করা থেকে দূরে ফেলবে।

একক টিক্স খেয়াল করুন!

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

'               \
   ..cmds...    \
'

আমি উপরেরটি প্রসারিত করেছি সুতরাং এখানে পড়া সহজ, তবে আমি সাধারণত এটি সমস্ত একক লাইনে চালিত করি:

$ cat ~/.ssh/my_id_rsa.pub | pssh -h ips.txt -l remoteuser -A -I -i 'umask 077; mkdir -p ~/.ssh; afile=~/.ssh/authorized_keys; cat - >> $afile; sort -u $afile -o $afile'

বোনাস উপাদান

ব্যবহার করে psshআপনি ফাইলগুলি নির্মাণ করতে এবং হয় ব্যবহার করে গতিশীল সামগ্রী সরবরাহ -h <(...some command...)করতে পারেন বা আপনি অন্যগুলির psshসুইচগুলি ব্যবহার করে আইপিগুলির একটি তালিকা তৈরি করতে পারেন -H "ip1 ip2 ip3"

উদাহরণ স্বরূপ:

$ cat .... | pssh -h <(grep -A1 dp15 ~/.ssh/config | grep -vE -- '#|--') ...

উপরেরটি আমার ~/.ssh/configফাইল থেকে আইপিগুলির একটি তালিকা বের করতে ব্যবহৃত হতে পারে । আপনি অবশ্যই printfগতিশীল সামগ্রী তৈরি করতেও ব্যবহার করতে পারেন :

$ cat .... | pssh -h <(printf "%s\n" srv0{0..9}) ....

উদাহরণ স্বরূপ:

$ printf "%s\n" srv0{0..9}
srv00
srv01
srv02
srv03
srv04
srv05
srv06
srv07
srv08
srv09

আপনি seqবিন্যাসিত সংখ্যা ক্রম উত্পন্ন করতেও ব্যবহার করতে পারেন !

রেফারেন্স এবং এর অনুরূপ সরঞ্জাম pssh

আপনি যদি psshউপরে এটি কাজটি করতে না চান তবে উপরে কিছু অন্যান্য বিকল্প রয়েছে।


2
তিনটি ছোটখাটো সংযোজন: (1) psshপাইথন স্ক্রিপ্ট এবং এটি দিয়ে ইনস্টল করা যায় pip install pssh। (2) এছাড়াও আপনি তৈরি করতে পারেন sshএকসঙ্গে চলছে সব সার্ভারে কী ssh-keygenমাধ্যমে pssh। (৩) কীগুলি উত্পন্ন করার পরে আপনি স্থানীয় মেশিনে একটি লুপে সমস্ত পাবলিক কী অনুলিপি করে, সেগুলিকে একটি সাধারণভাবে authorized_keysজমায়েত করে এবং প্রতিটি মেশিনে অনুলিপি করে "সমস্ত কিছু" কীগুলি বিতরণ করতে পারেন । ssh_agent/ ssh_addপাসওয়ার্ড সাহায্য করতে পারেন।
lcd047

@ lcd047 - ধন্যবাদ, আমি "এগুলিকে আজকের পরে এগুলিতে অন্তর্ভুক্ত করব!
slm

1
আমি মনে করি এই স্ক্রিপ্টটি catপুরানো (পুরানো) এর অকেজো ব্যবহারের জন্য যোগ্য : কোনও ফাইলের বিষয়বস্তু দিয়ে পাইপলাইন শুরু করতে, আপনি কেবল সেই ফাইলটি থেকে ইনপুটটিকে পুনর্নির্দেশ করতে পারেন।
মার্ক ভ্যান লিউউইন

1
@ মার্কওয়ানলিউউইন - আমি একমত হতে চাই, তবে আমি চেয়েছিলাম যে ভবিষ্যতের অনুসন্ধানের মাধ্যমে যে কেউ এটির সামনে আসতে পারে তার পক্ষে স্পষ্টভাবে বুঝতে হবে যে পাবকি কীভাবে পাস হচ্ছে pssh
slm

1
@MarcvanLeeuwen: এটা এখন আর বেহুদা যদি তুমি এটা ভালো একটি করুন: cat ~/.ssh/*.pub | ...। এই পরিস্থিতিতে আপনি যা চান তা হতে পারে বা নাও হতে পারে।
lcd047

7

বিকল্প ব্যবহার xargs, sshpassএবং ssh-copy-id:

বিন্যাসে শংসাপত্রের মধ্যে আপনার শংসাপত্রগুলি অনুমান করে। টেক্সট user:password@server:

$ cat credentials.txt
root:insecure@192.168.0.1
foo:insecure@192.168.0.2
bar:realsecure@192.168.0.3

আপনি করতে পারেন:

tr ':@' '\n' < credentials.txt \
| xargs -L3 sh -c 'sshpass -p $1 ssh-copy-id $0@$2'

দ্রষ্টব্য: ব্যবহারের পরে শংসাপত্র। Txt অপসারণ মনে রাখবেন !


2
এবং যদি এটি সমস্ত সার্ভারের জন্য একই ব্যবহারকারীর নাম এবং পাসওয়ার্ড হয় তবে আপনি সরাসরি এটি হার্ডকোড করতে পারেন এবং কেবলমাত্র আইপি-অ্যাড্রেসগুলির একটি তালিকা পড়তে পারেন :-)
ফ্যালকো

6

ক্লাস্টারএসএসএইচ আপনাকে প্রতিটি মেশিনে এবং একটি উইন্ডো দিয়ে সমস্ত উইন্ডো নিয়ন্ত্রণ করতে দেয়।

আমরা যদি 10 টি মেশিনের কথা বলি তবে এটি কাজ করবে। যদি আমরা 100 টি মেশিন কথা বলি তবে অনেকগুলি উইন্ডো থাকবে।

ক্লাস্টারএসএইচএইচটির সৌন্দর্য হ'ল যদি একটি মেশিন যদি বাকিগুলির মতো 100% না হয় তবে আপনি সমস্ত মেশিনে কীস্ট্রোক প্রেরণে ফিরে যাওয়ার আগে কেবল উইন্ডোটি ক্লিক করতে পারেন এবং কেবল সেই মেশিনে কীস্ট্রোকগুলি পাঠাতে পারেন।


6

ব্যবহার Ansible মোটামুটি সহজ। <USER>আসল লগইন নামের সাথে কেবল প্রতিস্থাপন করুন

$ cd /path/to/public/key

$ cat<<END > hosts
  host1.example.com
  10.10.10.10
  END

$ ansible -i hosts all --ask-pass -u <USER> -m authorized_key \
      -a "user=<USER> key='$(cat id_rsa.pub)'"        

0

কয়েকটি জিনিস যা সম্ভাব্যভাবে বিলটি ফিট করতে পারে:

অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে, sshpassসম্ভবত এটিই সবচেয়ে সহজ সমাধান।


-1

আপনার এখানে দুটি বিকল্প রয়েছে:

  • আপনি সমস্ত সার্ভারের আইপি ঠিকানা দিয়ে একটি ফাইল তৈরি করতে পারেন, তারপরে নীচে করুন

    while read -r ip;do
      ssh-copy-id -i .ssh/id_rsa.pub $ip
    done < servers.txt
    

ধরে নেওয়া servers.txtহচ্ছে আইপি / হোস্টনাম সহ ফাইল।

  • আপনি আপনার সমস্ত আইপি / হোস্টনাম একটি লুপে রাখতে ssh-copy-idপারেন এবং নীচের মত চালাতে পারেন:

    for i in hostname1 hostname2
      do ssh-copy-id -i .ssh/id_rsa.pub $i
    done
    

যা সম্পূর্ণরূপে ওপিএসের প্রয়োজনীয়তার পরিপন্থী: "আমি ssh-copy-idলুপের জন্য লুপ ব্যবহার করে আমার পাসওয়ার্ডটি বার বার টাইপ করতে চাই না ।"
ওল্ডটাইমার

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