ক্রন্টবে শেল স্ক্রিপ্ট ব্যবহার করে দূরবর্তী মেশিনে প্রবেশ করতে সক্ষম নন


11

নীচে আমি স্ক্রিপ্টটি চালানোর চেষ্টা করছি যা কোনও সমস্যা ছাড়াই চলে

for i in `seq 200 2100`
do
  usr=(`ssh -t -t -o ConnectTimeout=60 machine$1 finger | tail -1 | awk '{print$1}'`) 
  echo $usr
done

তবে একবার আমি এটি ক্রন্টাবের সাথে যুক্ত করলে এটি আমাকে ব্যবহারকারী দেয় না।

22  12  *  *  *  sh /home/subrahmanyam/Scripts/who.sh

আপনার চিন্তা দিন .....

ক্রোন রাক্ষস চলতে পারে, তাই আমাদের কিছু বাইনারি অন্তর্ভুক্ত করা দরকার ...?


1
অনুমতি অস্বীকার করা হয়েছে (পাবলিককি, gssapi-keyex, gssapi- সঙ্গে মাইক, পাসওয়ার্ড)। অনুমতি অস্বীকার করা হয়েছে (পাবলিককি, gssapi-keyex, gssapi- সঙ্গে মাইক, পাসওয়ার্ড)। অনুমতি অস্বীকার করা হয়েছে (পাবলিককি, gssapi-keyex, gssapi- সঙ্গে মাইক, পাসওয়ার্ড)।

এই সঙ্গে আপনার উদ্দেশ্য কি? আপনি কি অর্জন করার চেষ্টা করছেন. শুধু তাই আপনি জানেন আমরা নাকিসুরে কোনো দূষিত কার্যকলাপের উপর সহায়তা যদি আপনার আগ্রহও নেই
টিমোথি Frew

উত্তর:


14

আপনি ক্রোন সেশনের মধ্যে এসএসএস সংযোগ তৈরি করতে পারেন। আপনার যা প্রয়োজন তা হ'ল পাসওয়ার্ডহীন অ্যাক্সেসের জন্য একটি সর্বজনীন কী প্রমাণীকরণ সেটআপ করা। এটি কাজ করতে আপনার PubkeyAuthentication yesপ্রতিটি রিমোট সার্ভারে থাকা দরকার sshd_config

আপনি একটি পাসফ্রেজ সহ বা ছাড়াই একটি ব্যক্তিগত / সর্বজনীন কী জুড়ি তৈরি করতে পারেন। আপনি যদি একটি পাসফ্রেজ ব্যবহার করেন (পুনঃনির্বাচিত) তবে আপনাকে এসএসএল-এজেন্টও শুরু করতে হবে। পাসফ্রেজ ব্যতীত আপনার কেবল কমান্ড লাইনে প্যারামিটার যুক্ত -i your_identity_fileকরতে হবে ssh। ডিফল্ট হিসাবে sshব্যবহার করবে $HOME/.ssh/id_rsa

আমি একটি পাসফ্রেজ সহ কী কী ব্যবহার করে আপনার উদাহরণটি প্রতিলিপি করেছি। আমি এটি কীভাবে করেছি তা এখানে।

1) পাসফ্রেজ দিয়ে কী জুটি তৈরি করেছে। প্রাইভেট কীটি হিসাবে সংরক্ষণ করা হয়েছে ~/.ssh/id_rsa_test, এতে ডিফল্টরূপে সঠিক অনুমতি থাকতে হবে। এটি ব্যবহার না করার জন্য আমরা একটি খালি পাসফ্রেজ লিখতে পারি।

john@coffee:~$ ssh-keygen -N "somephrase" -f .ssh/id_rsa_test
Generating public/private rsa key pair.
Your identification has been saved in .ssh/id_rsa_test.
Your public key has been saved in .ssh/id_rsa_test.pub.
[snip]

2) সার্ভারগুলিতে সর্বজনীন কী প্রেরণ করে, তাদের সবার জন্য একই কাজ করেছেন। মনে রাখবেন তাদের PubkeyAuthenticationসক্ষম করা দরকার ।

john@coffee:~$ ssh-copy-id -i .ssh/id_rsa_test server1
The authenticity of host 'server1 (11.22.33.1)' can't be established.
RSA key fingerprint is 79:e8:0d:f5:a3:33:1c:ae:f5:24:55:86:82:31:b2:76.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,11.22.33.1' (RSA) to the list of known hosts.
john@server1's password: 
Now try logging into the machine, with "ssh 'server1'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

3) সার্ভিস হিসাবে এজেন্ট হিসাবে এজেন্ট চালান -s। আপনি লগআউট করলে এটি হত্যা করবে না। এর আউটপুটটি একটি বৈধ শেল স্ক্রিপ্ট, পরিবেশ নির্ধারণ করে সুতরাং ssh ক্লায়েন্ট কীভাবে এটিতে সংযুক্ত হতে পারে তা জানতে পারে। আমরা এটি একটি ফাইলে সংরক্ষণ করি (কেবলমাত্র প্রথম লাইনের সত্যই প্রয়োজন)।

john@coffee:~$ ssh-agent -s | head -n 1 > ssh-agent.cf 
john@coffee:~$ cat ssh-agent.cf 
SSH_AUTH_SOCK=/tmp/ssh-VhyKL22691/agent.22691; export SSH_AUTH_SOCK;

4) উপরের অংশটিকে আমাদের বর্তমান পরিবেশে লোড করা হয়েছে যাতে আমরা ssh-addআমাদের ব্যক্তিগত কী যুক্ত করতে পারি ssh-agent। উপর থেকে পাসফ্রেজ

john@coffee:~$ source ssh-agent.cf 
john@coffee:~$ ssh-add  .ssh/id_rsa_test
Enter passphrase for .ssh/id_rsa_test: 
Identity added: .ssh/id_rsa_test (.ssh/id_rsa_test)

5) যাচাইকৃত এটি যুক্ত করা হয়।

john@coffee:~$ ssh-add -l
2048 96:58:94:67:da:67:c0:5f:b9:0c:40:9b:52:62:55:6a .ssh/id_rsa_test (RSA)

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

john@coffee:~$ cat foo.sh 
#!/bin/bash

source /home/john/ssh-agent.cf
for server in server1 server2; do
    usr=$(ssh -t -t -o ConnectTimeout=60 $server finger | tail -1 | awk '{print $1}')
    date=$(ssh -o ConnectTimeout=60 $server date)
    echo "$server - $date - $usr" >> /home/john/foo.log
done

)) আমার ক্রন্টব (নোট করুন যে আমার shআসলে bash)

john@coffee:~$ crontab -l
# m h  dom mon dow   command
*/1  *  *  *  *  sh /home/john/foo.sh

8) আউটপুট

john@coffee:~$ tail -n 4 foo.log
server1 - Wed Mar 23 14:12:03 EET 2011 - john
server2 - Wed Mar 23 14:12:04 EET 2011 - john
server1 - Wed Mar 23 14:13:03 EET 2011 - john
server2 - Wed Mar 23 14:13:04 EET 2011 - john

পাসফ্রেজ ব্যবহারের ক্ষেত্রে একমাত্র সমস্যা হ'ল কমপক্ষে একবারে আপনাকে এটি ম্যানুয়ালি প্রবেশ করতে হবে। সুতরাং, উপরেরগুলি পুনরায় বুটের পরে স্বয়ংক্রিয়ভাবে কাজ করবে না।


আশ্চর্য - ধন্যবাদ আমি আপাতত পুনরায় বুট করার পরে কোনও স্বয়ংক্রিয় পুনঃসূচনা নিয়ে বেঁচে থাকতে পারি, কমপক্ষে।
পিটার মাউসন

আপনার এসএসএইচ কীগুলি প্রকাশ না করে তবে এসএসএইচ এজেন্ট ব্যবহার করে নিরাপদ সার্ভারগুলিতে নির্ধারিত এসএসএইচ সংযোগ স্থাপনের জন্য এসএসএস-ক্রোন ব্যবহার করুন। unix.stackexchange.com/questions/8903/…
লুচোস্টেইন

4

পাসওয়ার্ড কে টাইপ করে? ক্রোন জব আপনার ssh-এজেন্টে পেতে পারে না, তাই পাবলিক কী কাজ করবে না।

আপনাকে sshকোনও কী ফাইলটি স্পষ্টভাবে সরবরাহ করতে হবে ( -iবিকল্পটি দেখুন), যেহেতু এটি কোনও এজেন্টকে জিজ্ঞাসা করতে পারে না; এবং সেই কীটির অবশ্যই একটি খালি পাসফ্রেজ থাকতে হবে।


ব্যবহারকারীর নাম এবং পাসওয়ার্ডও পাস করার চেষ্টা করা হয়েছে - ssh -t -t -o কানেক্টটাইমআউট = 60 ব্যবহারকারী @ মেশিন $ 1 আঙুল | লেজ -1 | awk '{মুদ্রণ $ 1}' </ home / ব্যবহারকারী / পাসডাব্লু ---- মানে হোম ডিরেক্টরি এনএফএসে রয়েছে, সুতরাং এটি মরিচামিনে মাউন্ট করে

যদি ssh এর কোনও বুদ্ধি থাকে তবে এটি /dev/ttyপাসওয়ার্ডের পরিবর্তে পড়তে ব্যবহার করে stdin; যে ক্রোন থেকে কাজ করবে না।
গাইকোসর

দেওয়ার চেষ্টা করলাম -i অপশন কিন্তু ভাগ্য নেই! ---- ssh -o কানেক্টটাইমআউট = 60 -i / home/subrahmanyam/.ssh/علوم_hosts মেশিন $ 1 আঙুল | লেজ -1 | awk '{মুদ্রণ $ 1}' ------ সতর্কতা: বেসরকারী ব্যক্তিগত ফাইল! '/ Home/user/.ssh/ज्ञ_hosts' এর জন্য 0640 এর অনুমতিগুলি খুব বেশি খোলা। আপনার ব্যক্তিগত কী ফাইলগুলি অন্যের দ্বারা অ্যাক্সেসযোগ্য নয় এমনটি সুপারিশ করা হয়। এই ব্যক্তিগত কী উপেক্ষা করা হবে। খারাপ অনুমতি: কী উপেক্ষা করুন:

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

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

1

ফোর্সফেস্কের মতো অস্থায়ী ফাইল সঞ্চয় করার পরিবর্তে, আমি findসক্রিয় এজেন্টের জন্য অনুসন্ধান করতে ব্যবহার করতে পছন্দ করি ।

যে স্ক্রিপ্টের দরকার সেই বিষয়টিতে ssh-agentআমি ব্যবহার করি:

export SSH_AUTH_SOCK=$(find /run/user/$(id -u)/ -mindepth 2 -maxdepth 2 -path '*keyring-*' -name 'ssh' -print -quit 2>/dev/null)

এটি ssh-agentসকেট অনুসন্ধান করে এবং প্রথমটি ফেরত দেয়। এটি কেবলমাত্র বর্তমান ব্যবহারকারীর মধ্যেই সীমাবদ্ধ, অতএব আপনি দুর্ঘটনাক্রমে অন্য ব্যবহারকারীদের ব্যবহার করার চেষ্টা করবেন না এবং অনুমতি ত্রুটি অস্বীকার করার সুযোগ পাবেন না। আপনি ইতিমধ্যে একটি সক্রিয় সঙ্গে লগ ইন করা প্রয়োজন ssh-agent। (জিইউআই শুরু হলে উবুন্টু এজেন্ট শুরু করে)।

আপনি যদি এটি অন্য স্ক্রিপ্টে রাখেন তবে আপনাকে এটিকে কল করতে হবে sourceবা .কারণ এটি SSH_AUTH_SOCKভেরিয়েবল সেট করতে হবে ।


0

আপনার এসএসএইচ কীগুলি প্রকাশ না করে তবে এসএসএইচ এজেন্ট ব্যবহার করে নিরাপদ সার্ভারগুলিতে নির্ধারিত এসএসএইচ সংযোগ স্থাপনের জন্য এসএসএস-ক্রোন ব্যবহার করুন


0

আপনি আপনার স্ক্রিপ্ট বা কমান্ডটি ক্রন্টবায় চালাতে পারেন:

0 * * * * bash -c -l "/home/user/sshscript.sh"

অথবা

0 * * * * bash -c -l "ssh root@yourhost 'echo $HOSTNAME'"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.