Crontab এর সাথে একটি ssh সংযোগ স্বয়ংক্রিয় করা


1

আমি ssh এর সাথে একটি গিট পুশ প্রক্রিয়া স্বয়ংক্রিয় করতে ক্রোনটব করার জন্য সংগ্রাম করে যাচ্ছি, এবং এটি ssh এজেন্টের সাথে একটি কী সেটআপ করা কৃপণ প্রমাণ করছে। এজেন্ট পরীক্ষা করার জন্য একটি প্রাথমিক স্ক্রিপ্ট দিয়ে শুরু:

# set paths (all examples)
source /etc/profile
export PATH=$PATH:/Users/myusername/.ssh

eval "$(ssh-agent)" > ssh_agent.txt
/usr/bin/ssh-add -l >> ssh_agent.txt

.. যা নিম্নলিখিত আউটপুট:

Agent pid 16062
The agent has no identities.

সুতরাং এজেন্ট সক্রিয়। কীটি যুক্ত করতে এবং এটি এজেন্টের সাথে নিবন্ধীকৃত পরীক্ষা করতে। আইটার্ম 2 এ ম্যানুয়ালি এটি ঠিকঠাক কাজ করে:

/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
2048 [key fingerprint] /Users/myusername/.ssh/id_rsa (RSA)

আমি এই স্ক্রিপ্টটি ব্যবহার করে ক্রোনটব কাজের ভিতরে এটি প্রতিলিপি করার চেষ্টা করব:

/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
/usr/bin/ssh-add -l >> ssh_agent.txt

.. The agent has no identitiesযা ফাইল করতে রিপোর্ট করে, এবং নিম্নলিখিতগুলির মাধ্যমে "You have mail in /var/mail/myusername":

[email metadata]
Enter passphrase for /Users/myusername/.ssh/id_rsa: 

সুতরাং কীটি লোড করার চেষ্টা করছে তবে পাসফ্রেজ প্রম্পটে ধরা হচ্ছে। এখানে আমি ব্যবহার করতে চান expectএই বর্ণনা অনুযায়ী, এটা পাসফ্রেজ দিতে unix.stackexchange উত্তর (যা মনে হচ্ছে ওএসএক্স মধ্যে কাজ করা উচিত):

#!/usr/bin/expect -f
/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
expect "Enter passphrase for /Users/myusername/.ssh/id_rsa:"
send "mypassphrase\n";
interact

মেল ত্রুটির প্রতিক্রিয়াটি হ'ল:

Enter passphrase for /Users/myusername/.ssh/id_rsa: 
couldn't read file "Enter passphrase for /Users/myusername/.ssh/id_rsa:": no such file or directory
/Users/myusername/test/crontest.sh: line 17: send: command not found
/Users/myusername/test/crontest.sh: line 18: interact: command not found

সুতরাং আমি এই এসও উত্তরের ভিত্তিতে একটি বিকল্প কনফিগারেশন চেষ্টা করেছি :

#!/usr/bin/expect -f
expect -c "
/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
expect \"Enter passphrase for /Users/myusername/.ssh/id_rsa: \"
send \"mypassphrase\n\";
interact
"

.. এবং নিম্নলিখিত মেইল ​​ত্রুটি রিপোর্ট পান:

invalid command name "/usr/bin/ssh-add"
    while executing
"/usr/bin/ssh-add /Users/myusername/.ssh/id_rsa"
Could not open a connection to your authentication agent.

আমি এখানে সমস্যাটি বুঝতে পারি না - ssh এজেন্ট কাজ করে এবং কীটি অ্যাক্সেসযোগ্য বলে মনে হচ্ছে তাই এই 'সংযোগ' সমস্যাটি কী? আমি expectসাফল্য ছাড়া অন্য কনফিগারেশন চেষ্টা করেছি । সহায়তার জন্য অত্যন্ত কৃতজ্ঞ।


এনবিটিকে eval "$(ssh-agent)"কার্যকারী স্ক্রিপ্টে অন্তর্ভুক্ত করা দরকার কারণ এটি এজেন্টকে প্রকৃতপক্ষে শুরু করে
ভূগোলিক 13

উত্তর:


1

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

আপনার নিয়মিত এসএসএইচ কীটি ব্যবহার করার পরিবর্তে, আমি একটি নতুন কী তৈরি করব যা ক্রোন দ্বারা চালিত হতে চান সেই কমান্ডটি চালাতে কেবল কখনও ব্যবহৃত হয়। আমি কোনও পাস-বাক্যাংশ ছাড়াই কীটি কনফিগার করব এবং এর মালিকানা / অনুমতিগুলি (0600) পরিবর্তন করব যাতে এটি ক্রোন জব হিসাবে চালিত কার্যকর ব্যবহারকারী আইডি দ্বারা ব্যবহার করা যায়, যার অর্থ, ক্রোনটব যে ব্যবহারকারীদের আইডি চলছে প্রক্রিয়া করেছি।

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

সাধারণভাবে, স্বয়ংক্রিয় প্রক্রিয়াগুলির জন্য, পাস-বাক্যাংশ ছাড়াই নির্দিষ্ট কীগুলি তৈরি করা ভাল। অনুমতিপ্রাপ্ত কমান্ডগুলির একটি সীমিত সেটটি তারপরে দূরবর্তী এসএসএইচ সার্ভারে authorized_keysফাইলের লাইনে বিকল্প জোড়া যুক্ত করে কনফিগার করা হয় , যেমন,

command="automated-task.sh",client=my.local.host,no-pty,no-agent-forwarding,no-port-forwarding ssh-rsa AAA…public…part…of…specific…keypair automated_user@server

দাবি অস্বীকার: ওএস এক্সের তুলনায় জিএনইউ / লিনাক্সের সাথে আমার আরও অভিজ্ঞতা আছে তবে এএফআইএকি উপরের তথ্যটি সমস্ত * নিক্স সিস্টেমের জন্য প্রয়োগ করা উচিত।


এটি দুর্দান্ত কাজ করে। ধন্যবাদ অ্যান্টনি আপনি কি বলতে পারবেন ডিফল্ট OSX chmod 600 কোনও ব্যক্তিগত কীটির জন্য যথেষ্ট?
ভূগোলিক

1
এটি শুনতে শুনতে @geotheory খুশি। 600 ডান ঠিক আছে।
অ্যান্টনি জিওগেইগান

ফাইল অনুমতিগুলি অন্তর্ভুক্ত করার জন্য আমি আমার উত্তরটি আপডেট করেছি।
অ্যান্টনি জিওগেইগান

1

বিকল্প উত্তর

আমি কেবল ভেবেছিলাম আমি আপনার expectস্ক্রিপ্টগুলি ঘনিষ্ঠভাবে দেখব এবং আমি লক্ষ্য করেছি যে তারা spawnকমান্ডটি অনুপস্থিত :

#!/usr/bin/expect -f
spawn /usr/bin/ssh-add /Users/myusername/.ssh/id_rsa
expect "Enter passphrase for /Users/myusername/.ssh/id_rsa:"
send "mypassphrase\n";
interact

expectম্যানুয়াল থেকে :

স্প্যান [আরগস] প্রোগ্রাম [আরগস]

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


আমি পেয়েছি "স্প্যান: কমান্ড পাওয়া যায় নি", যা দেখে মনে হচ্ছে বাশটি ভুল দোভাষী, যা আমার চেষ্টা করা দ্বিতীয় পদ্ধতিটির যুক্তি ব্যাখ্যা করে। সুতরাং আমি সেই সংস্করণটি 'স্পন' দিয়ে চেষ্টা করেছিলাম, যা তাত্পর্যপূর্ণভাবে ফিরে আসে: spawn /usr/bin/ssh-add /Users/myusername/.ssh/id_rsa Enter passphrase for /Users/myusername/.ssh/id_rsa:তবে, এখনও "এজেন্টের কোনও পরিচয় নেই", তাই এখনও কিছু ভুল।
ভূগোলিক

0

এই উত্তরের আরও একটি কার্যকরী সমাধান রয়েছে :

যদি আপনি ssh-addssh এজেন্টে আপনার কী (গুলি) যুক্ত করতে ব্যবহার করে থাকেন তবে SSH_AUTH_SOCKআপনি আপনার ক্রন্টবায় পরিবেশ পরিবর্তনশীল যুক্ত করতে পারেন এবং সেখানে ssh কমান্ডগুলি ইতিমধ্যে লোড এবং আনলক করা কীগুলি ব্যবহার করতে সক্ষম হবে।

  1. একটি নিয়মিত টার্মিনাল সেশনে আপনার এসএস-এজেন্টটি লোড করুন (এটি পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে দেওয়া হয়েছে; আমি ম্যাকোএসে মনে করি এটি ডিফল্টরূপে চলছে, বা আপনি চালাতে পারেন ssh-add -t 24h ~/path/to/your.key)।
  2. এর সাথে আপনার এসএসএইচ_এইউথ_সক অবস্থান নিন env | grep SSH_AUTH_SOCK
  3. আপনার নিম্নলিখিতরূপে crontab পরিবর্তন, যেমন উপরের এই যোগ করুন, SSH_AUTH_SOCK=/Users/USER/.ssh/ssh_auth_sock

যদি আপনি কীগুলি লোড বা সত্যায়িত না করে থাকেন তবে ক্রোনট্যাব ssh কমান্ডগুলি এখনও ব্যর্থ হবে, তবে আমার কাছে কীগুলি লোড হওয়ার 99% সময় থেকে এটি ঠিক আছে।

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