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


247

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

আমি জানি যে এমন একটি উপায় রয়েছে যা আপনার bash_profileফাইলে কিছু লাইন যুক্ত করা উচিত তবে প্রতিবার আমি যখনই কোনও নির্দিষ্ট মেশিনে রিবুট / লগইন করি তখন পাসওয়ার্ডটি টাইপ করতে হবে।

if [ -z "$SSH_AUTH_SOCK" ] ; then
    eval `ssh-agent -s`
    ssh-add
fi

এই প্রশ্নের অনুরূপ stackoverflow.com/questions/18880024/start-ssh-agent-on-login
steampowered

উত্তর:


348

এটি সুরক্ষা এবং সুবিধার মধ্যে বাণিজ্য-বন্ধের একটি সাধারণ উদাহরণ। ভাগ্যক্রমে অনেকগুলি বিকল্প রয়েছে। সর্বাধিক উপযুক্ত সমাধান ব্যবহারের পরিস্থিতি এবং সুরক্ষার পছন্দসই স্তরের উপর নির্ভর করে।

পাসফ্রেজ সহ ssh- কী, না ssh-agent

এখন যখন প্রমাণীকরণের জন্য কী ব্যবহার করা হবে তখন পাসফ্রেজটি প্রবেশ করতে হবে। সুরক্ষা দৃষ্টিকোণ থেকে এটি সর্বোত্তম বিকল্প, এটি সবচেয়ে খারাপ ব্যবহারের সুযোগ দেয়। এটি বারবার প্রবেশ করার বোঝা হ্রাস করার জন্য-অর্ড-অর্ডারে একটি দুর্বল পাসফ্রেজ বেছে নেওয়া হতে পারে।

পাসফ্রেজ সহ ssh- কী, সহ ssh-agent

নিম্নলিখিতটি যুক্ত করার ফলে লগইনে ~/.bash_profileস্বয়ংক্রিয়ভাবে ssh-agentssh-key (গুলি) আরম্ভ হবে এবং লোড হবে :

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

এখন প্রতিটি লগইনে পাসফ্রেজ অবশ্যই প্রবেশ করানো উচিত। ব্যবহারের দৃষ্টিকোণ থেকে কিছুটা উন্নত হওয়ার পরে, এটির মধ্যে এমন একটি অসুবিধা রয়েছে যা ssh-agentলগইন সেশনের সময় কী ব্যবহার করা উচিত কিনা তা বিবেচনা না করে পাসফ্রেজের জন্য অনুরোধ জানানো হয়। প্রতিটি নতুন লগইন স্বতন্ত্র ssh-agentউদাহরণ তৈরি করে যা লগআউট করার পরেও মেমরিতে যুক্ত কীগুলি নিয়ে চলমান থাকে, স্পষ্টভাবে হত্যা না করা পর্যন্ত।

লগআউটে হত্যা করতে ssh_agent, নিম্নলিখিতগুলিতে যুক্ত করুন~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

বা নিম্নলিখিতগুলি ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

কলিন অ্যান্ডারসনের উত্তরেssh-agent যেমন ফাইল সিস্টেমে স্থির স্থানে এজেন্টের সাথে অবিরাম যোগাযোগ সকেট তৈরি করে একাধিক উদাহরণ তৈরি করা এড়ানো যায় । এটি একাধিক এজেন্ট উদাহরণস্বরূপ তৈরির উন্নতি, তবে স্পষ্টভাবে ডিক্রিপ্টেড কীটি হত্যা না করলে লগআউট করার পরেও স্মৃতিতে রয়ে যায়।

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

পাসফ্রেজ সহ ssh- কী, সহ ssh-ident

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

সক্ষম করতে ssh-ident, এটি ইনস্টল করুন এবং আপনার সাথে নিম্নলিখিত উপন্যাস যুক্ত করুন ~/bash_profile:

alias ssh='/path/to/ssh-ident'

পাসফ্রেজ সহ ssh- কী, সহ keychain

keychainএকটি ছোট্ট ইউটিলিটি যা ssh-agentআপনার পক্ষে পরিচালনা করে এবং ssh-agentলগইন সেশন শেষ হওয়ার পরে এটি চলমান রাখতে দেয় । পরবর্তী লগইনগুলিতে, keychainবিদ্যমান ssh-agentউদাহরণের সাথে সংযুক্ত হবে । অনুশীলনে, এর অর্থ হ'ল পুনরায় বুট করার পরে প্রথম লগইন করার সময় পাসফ্রেজটি প্রবেশ করতে হবে। পরবর্তী লগইনগুলিতে, বিদ্যমান ssh-agentউদাহরণ থেকে এনক্রিপ্ট করা কী ব্যবহার করা হয়। cronএটি পাসওয়ার্ডবিহীন এসএস-কী ছাড়াই চাকরিতে পাসওয়ার্ডহীন আরএসএ / ডিএসএ প্রমাণীকরণের অনুমতি দেওয়ার জন্য কার্যকর হতে পারে ।

সক্ষম করতে keychain, এটি ইনস্টল করুন এবং নিম্নলিখিতগুলির মতো কিছু যুক্ত করুন ~/.bash_profile:

eval `keychain --agents ssh --eval id_rsa`

সুরক্ষার দৃষ্টিকোণ থেকে ssh-identএবং নির্দিষ্ট সেশনের আজীবন সীমাবদ্ধ উদাহরণগুলির keychainচেয়ে খারাপ ssh-agent, তবে তারা উচ্চ স্তরের সুবিধার্থে প্রস্তাব দেয়। এর সুরক্ষা উন্নত করতে keychainকিছু লোক --clearতাদের ~/.bash_profileকীচেন অনুরোধে বিকল্প যুক্ত করে । এই পাসফ্রেজগুলি অবশ্যই উপরের মতো লগইনে পুনরায় প্রবেশ করাতে হবে cronতবে ব্যবহারকারীর লগ আউট হওয়ার পরেও চাকরিগুলি এনক্রিপ্ট করা কীগুলিতে অ্যাক্সেস পাবে। keychain উইকি পাতা আরো তথ্য এবং উদাহরণ রয়েছে।

পাসফ্রেজ ছাড়াই ssh- কী

সুরক্ষা দৃষ্টিকোণ থেকে, এটি সবচেয়ে খারাপ বিকল্প, যেহেতু প্রাইভেট কীটি সম্পূর্ণরূপে সুরক্ষিত না হলে যদি এটি উন্মুক্ত হয়। তবে এটি নিশ্চিত করার একমাত্র উপায় যে পুনরায় বুট করার পরে পাসফ্রেজটি পুনরায় প্রবেশের প্রয়োজন নেই।

স্ক্রিপ্ট থেকে পাসফ্রেজ সহssh-agent , পাসফ্রেজ সহ ssh- কী ssh-add

যদিও এটি ssh-addকোনও স্ক্রিপ্ট থেকে পাসফ্রেজটি পাস করার জন্য একটি সহজ ধারণা বলে মনে হতে পারে , যেমন এটি পাসফ্রেজটি পড়েনিecho "passphrase\n" | ssh-add বলে মনে হচ্ছে এটি এতটা সোজা নয়, তবে সরাসরি পড়ার জন্য খোলেssh-add stdin/dev/tty

ইন্টারেক্টিভ অ্যাপ্লিকেশনগুলি স্বয়ংক্রিয় করার জন্য একটি সরঞ্জাম, এটির সাথে কাজ করা যেতে পারে expect। নীচে স্ক্রিপ্টের একটি উদাহরণ যা স্ক্রিপ্টে সঞ্চিত পাসফ্রেজ ব্যবহার করে একটি এসএস-কী যুক্ত করে:

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact

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


1
ঠিক আছে, তবে আমি যখন আপনার কোডটি ~ / .bash_profile এ রাখি তখন প্রতিবার আমি লগইন করে আমাকে পাসওয়ার্ড টাইপ করতে হয়, আমি এটিও চাই না। আমি মোটেই নিরাপত্তা নিয়ে উদ্বিগ্ন নই। প্রতিধ্বনি "পাস \ n" | ssh-add কাজ করে না
zdun8

3
@ ব্যবহারকারী1607072 হ্যাঁ, উত্তরে বর্ণিত ssh-agentস্নিপেটটি ~/.bash_profileএভাবে আচরণ করে beha আপনি keychainইউটিলিটিটি দেখতে চাইতে পারেন । সঙ্গে keychainআপনি পুনরায় বুট করার পরে প্রথম লগইনে পাসওয়ার্ড লিখতে হবে, কিন্তু পরবর্তী লগইন উপর keychainএকটি বিদ্যমান সাথে সংযোগ করা হবে ssh-agentমেমরি ডিক্রিপ্ট কী দিয়ে উদাহরণস্বরূপ। তা ছাড়া পাসফ্রেজ ছাড়াই একটি এসএস-কী তৈরি করার বিকল্প রয়েছে তবে এটি অবশ্যই প্রস্তাবিত নয়।
থমাস নাইম্যান

3
@ ব্যবহারকারী1607072 আমি আরও সুরক্ষিত পদ্ধতির মধ্যে দৃ strongly়তার সাথে পরামর্শ দিচ্ছি, তবে ssh-addস্ক্রিপ্ট থেকে পাসফ্রেজ দেওয়ার উপায় আছে । echo "pass\n" | ssh-addকাজ না করার কারণটি হ'ল এটি ssh-addথেকে পাসওয়ার্ডটি পড়ে না stdin, তবে /dev/ttyসরাসরি পড়ার জন্য খোলে । এর জন্য একটি কার্যতালিকা অন্তর্ভুক্ত করার জন্য উত্তর আপডেট করেছে, একটি ইউটিলিটি কল করে expect
থমাস নাইম্যান

1
@ user1607072 এটা আপনার ব্যবহারের ক্ষেত্রে জন্য আরেকটু Overkill কিন্তু হতে পারে কার্বারোস SSH সঙ্গে একযোগে GSSAPI সমর্থন এছাড়াও passwordless SSH লগইন করার জন্য ব্যবহার করা যেতে পারে। Ssh এ সম্পর্কিত প্রমাণীকরণ পদ্ধতি বলা হয় gssapi-with-mic। এটি সাধারণত বৃহত্তর নেটওয়ার্কগুলিতে ব্যবহৃত হয় তবে অবশ্যই যদি আপনার আগ্রহ থাকে তবে এটি সন্ধানের পক্ষে উপযুক্ত।
থমাস নাইম্যান

1
@ এরিকব্রাউন: ইতিমধ্যে এখানে উত্তর দেওয়া হয়েছে । আপনি যদি সিস্টেমড লগইন ম্যানেজারটিতে ব্যবহারকারীর দীর্ঘকালীন অক্ষম থাকে তবে এসএসএইচ এজেন্ট ইউনিটটি লগআউট করার সময় বন্ধ করা উচিত । যদি ব্যবহারকারী অলসভাবে সক্ষম থাকে তবে শেষ লগইন সেশনটি বন্ধ হয়ে যাওয়ার পরেও সিস্টেমড ব্যবহারকারী উদাহরণ এবং এসএসএইচ এজেন্ট ইউনিট চালিয়ে রাখা হয়।
টমাস নাইম্যান

93

এটি আপনার যুক্ত করুন ~/.bashrc, তারপরে লগআউট করুন এবং কার্যকর হওয়ার জন্য ফিরে আসুন।

if [ ! -S ~/.ssh/ssh_auth_sock ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
ssh-add -l > /dev/null || ssh-add

প্রতিটি রিবুটের পরে আপনি প্রথমবার লগইন করলে এটি কেবল পাসওয়ার্ডের জন্য অনুরোধ জানানো উচিত। এটি ssh-agentচলমান অবধি যতক্ষণ তা পুনরায় ব্যবহার করতে থাকবে using


1
খুব ঝরঝরে, এইভাবে আপনার কেবল একটি এসএসএল-এজেন্ট চলছে (: @ থমাস নিউম্যানের দ্বিতীয় সমাধান হিসাবে একাধিক এজেন্ট আমার কাছে সুরক্ষা ঝুঁকি বলে মনে হচ্ছে ...
ড্রেভিকো

1
বিভিন্ন সাইটে গবেষণা এবং বিভিন্ন সমাধান পড়ার পরে, এখানে এটি একদম পরিষ্কার, মনে হয় সোজা। খুব সুন্দর. +1
ডাঃ Beco

1
এটি করার জন্য আরও ভাল: `ওরফে এসএসএস = এসএস-চেক-এজেন্ট", এবং উপরে চেক-এজেন্ট সংস্করণটি করুন that উপায়: ক) আপনি কেবলমাত্র একটি এজেন্ট পাবেন এবং খ) আপনার কেবল এজেন্টের প্রয়োজন হলে আপনি পান
এরিক অ্যারোনস্টি

2
আমি মনে করি -s ডিফল্ট, সুতরাং আমরা ইতিমধ্যে এটি করছি।
কলিন অ্যান্ডারসন

1
ssh-add -lএজেন্টের পরিচয় থাকে এবং 0 এর বহির্গমন কোড ফেরত দেয় যখন আপনি শেষ কমান্ডটি থেকে গ্রেপ কেটে ব্যবহার করতে পারেনssh-add -l > '/dev/null' || ssh-add
গ্রান্ট হ্যামফ্রিজ

16

ওপি-র প্রশ্নের সাথে নিবিড়ভাবে সম্পর্কিত নয়, তবে এটি অন্যের পক্ষে উপকারী হতে পারে: যেহেতু .2.২.০ এসএসএস (১) এর একটি বিকল্প রয়েছে যা প্রথম প্রমাণীকরণের পরে ssh-এজেন্টে একটি কী যুক্ত করতে দেয়; বিকল্প AddKeysToAgentএবং সেট করতে yes, no, ask, অথবা confirm, Systemwide বা আপনার ব্যক্তিগত উপর .ssh/configফাইল।

তথ্যসূত্র: https://www.openssh.com/txt/release-7.2


2
যারা .ssh/configফাইলটিতে নতুন তাদের ক্ষেত্রে প্রযোজ্য: এটি প্রযোজ্য sshএবং এর sshপিছনে যে কোনও কিছু ব্যবহৃত হয় , উদাহরণস্বরূপ scp, এবং প্রতি হোস্ট ভিত্তিতে করা যেতে পারে।
এসইওএফ

এটি লগইন করে প্রতিটি সময় পাসওয়ার্ডের জন্য জিজ্ঞাসা করে এবং উদাহরণস্বরূপ গিট টান দেওয়ার চেষ্টা করে।
ট্রেনোসিস

@ ট্রেনোসিস এই সমস্যাটি হ'ল সম্ভবত আপনার ভবিষ্যতে ব্যবহারের জন্য ডিক্রিপ্টেড কী (গুলি) মেমোরিতে রাখার জন্য কোনও এসএস-এজেন্ট দৌড়াদৌড়ি নেই। Ssh-এজেন্ট ব্যবহার করার সময় আপনাকে লগইন সেশনে প্রতি একবার প্রদত্ত কীটির জন্য পাসওয়ার্ড প্রবেশ করতে হবে।

7

ssh-agent বিভিন্ন আনলকড এস-এস-কীগুলি ক্যাশে করে, যাতে আপনার পাসওয়ার্ড দ্বারা ssh-key সুরক্ষিত থাকতে পারে, তবে প্রতিবার একবারে টাইপ না করেই।

আনলক করা কীগুলি ক্যাশে করার জন্য অবশ্যই এই কীগুলি আনলক করা দরকার। পাসফ্রেজের সাথে লক থাকা কীগুলি আনলক করার জন্য অবশ্যই এই পাসফ্রেজগুলি জানা দরকার।

যে কোনও পদ্ধতি যা মানুষের কাছ থেকে অনুমোদনের প্রয়োজন হয় না (যেমন "পাসওয়ার্ডে টাইপ করা") কেবল আপনার সিস্টেমকেই নিরাপত্তাহীন করে তুলবে না; এটি ssh- এজেন্টের পুরো উদ্দেশ্যকে অর্থহীন করে দেবে।

এই সব বলার পরে, আপনি কেবল এসএস-কী ব্যবহার করতে পারেন যা পাসওয়ার্ড সুরক্ষিত নেই ( Enterকী-প্রজন্মের সময় পাসওয়ার্ড জিজ্ঞাসা করার সময় আঘাত করুন )। যেহেতু কোনও পাসওয়ার্ড নেই, ssh-agentএটি ক্যাশে করার জন্য আপনাকে ( পাসওয়ার্ড) জিজ্ঞাসা করার প্রয়োজন নেই।


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

5

আপনার এসএসএইচ পাসফ্রেজটি স্বয়ংক্রিয় করার জন্য এখানে একটি কার্যকারিতা রয়েছে।

  1. একটি ওয়ান-লাইন স্ক্রিপ্ট তৈরি করুন যা আপনার পাসফ্রেজকে স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করে, যেমন:

     echo 'echo MY_SSH_PASSWORD' > ~/.print_ssh_password && chmod 700 ~/.print_ssh_password
    

    গুরুত্বপূর্ণ: আপনার ইতিহাসে আপনার পাসওয়ার্ড সংরক্ষণ করা রোধ করতে নেতৃস্থানীয় স্থানটি অনুলিপি করা নিশ্চিত করুন ।

এবং নীচের একটি পদ্ধতি ব্যবহার করুন।

  • একটি স্ট্যান্ডার্ড ইনপুট পদ্ধতির ব্যবহার:

    cat ~/.ssh/id_rsa | SSH_ASKPASS=~/.print_ssh_password ssh-add -
    
  • বা নামযুক্ত পাইপ পদ্ধতির:

    1. একটি নামযুক্ত পাইপ তৈরি করুন (আপনি একটি প্রক্রিয়া বিকল্পের চেষ্টাও করতে পারেন ):

      mkfifo --mode 0600 ~/.ssh_fifo
      
    2. ssh-addপ্রমাণীকরণের জন্য ব্যবহৃত প্রোগ্রামটি নির্দিষ্ট করে চালান :

      cat ~/.ssh/id_rsa >~/.ssh_fifo | SSH_ASKPASS=~/.print_ssh_password ssh-add ~/.ssh_fifo
      

    দেখুন: man ssh-addসম্পর্কে আরও পড়তে SSH_ASKPASS


2
echo my_passphraseএকটি বড় নিরাপত্তা গর্ত হয়। প্রথমে আপনি এটি টাইপ করার পরে, পাসওয়ার্ডটি আপনি কখনও শেল ব্যবহার করেন তা ইতিহাসের ফাইলে পরিষ্কার লেখা থাকে। এবং দ্বিতীয় কমান্ড লাইনের যুক্তিগুলি ইউনিক্সে ( ps -ef) পাঠযোগ্য world কমান্ড লাইনের যুক্তিতে পাসওয়ার্ড কখনও রাখবেন না!
সিলিং

1
@ এসিভিং অতিরিক্ত নেতৃস্থানীয় স্থান যুক্ত করা ইতিহাসের ফাইলের সাথে সমস্যার সমাধান করে। অতিরিক্ত তথ্য যুক্ত করা হয়েছে।
কেনারব

@ টেনারব: এটি psআউটপুটে দৃশ্যমান পাসওয়ার্ডের বৃহত্তর সমস্যাটির সমাধান করে না । ইতিহাস ফাইলটি সাধারণত নিজের মালিকের দ্বারা কেবল পাঠযোগ্য, তবে কমান্ড লাইনগুলি সিস্টেমের সমস্ত ব্যবহারকারী দ্বারা পঠনযোগ্য।
থমাস নাইম্যান

4

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

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

আপনার দুটি পছন্দ থাকবে:

  1. আপনার কীগুলির জন্য সমস্ত পাসফ্রেসগুলি সরিয়ে ফেলুন, যা আপনার কী ফাইলগুলি চুরি হয়ে গেলে সুরক্ষা দুর্বল করে । (এইভাবে প্রস্তাবিত নয় )

  2. আপনার কীগুলির জন্য একই পাসফ্রেজটি ব্যবহার করুন। তারপরে আপনি যখন ssh-add keyfile1 keyfile2 ..., কেবলমাত্র প্রতিটি বিভাগে একবারে পাসফ্রেজ টাইপ করতে হবে।

উভয় ক্ষেত্রেই, আপনি নীচে যেমন স্ক্রিপ্ট ফাইল "ssh_keys_section.sh" লিখতে পারেন:

#!/bin/bash
# This script run a ssh-agent on a sub-shell and automatically ssh-add all keyfiles at once.
# This agent ends when you type `exit` to close the sub-shell.
exec ssh-agent bash -c "ssh-add /path/to/keyfile1 /path/to/keyfile2 ...; exec bash"

মন্তব্য:

  • পাসফ্রেজ পরিবর্তন বা মুছে ফেলার আদেশ: ssh-keygen -p -f keyfile
  • সাব-শেলের মধ্যে, আপনি হয়ত আরও টার্মিনাল কাঁটাতে পারেন যা একই আনলক করা কীগুলি ভাগ করে, সম্ভবত একটি কমান্ড ব্যবহার করে /path/to/yourterminal &(ওএসের উপর নির্ভর করে)

সিগুইনের মধ্যে উইন্ডোজ অন, /path/to/yourterminal &==>mintty &
জনি ওয়াং

2
if [ ! -S ${HOME}/.ssh/ssh_auth_sock ]; then
  eval $(ssh-agent)
  ln -sf "${SSH_AUTH_SOCK}" ${HOME}/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=${HOME}/.ssh/ssh_auth_sock

ssh_keys=$(find -E ~/.ssh -type f -regex '.*(rsa$|pem)')
ssh_agent_keys=$(ssh-add -l | awk '{key=NF-1; print $key}')

for k in "${ssh_keys}"; do
    for l in "${ssh_agent_keys}"; do
        if [[ ! "${k}" = "${l}" ]]; then
            ssh-add "${k}" > /dev/null 2>&1
        fi
    done
done

2

আমি স্টিম্পওয়ার্ড দ্বারা উল্লিখিত স্ক্রিপ্টটি ব্যবহার করতাম, আমি এখন নীচেরটি তৈরি করেছি, কারণ এতে ফাইলগুলি পড়ে থাকে না।

কেবল খোলের উপর কাজ করা zsh

#!/bin/sh

AGENT_BIN=`which ssh-agent`
AGENT_ADD_BIN=`which ssh-add`
AGENT_PID=`ps -fe | grep ${AGENT_BIN} | awk -vuser=$USER -vcmd="$AGENT_BIN" '$1==user && $8==cmd{print $2;exit;}'`
if [ -z "$AGENT_BIN" ]; then
    echo "no ssh agent found!";
    return
fi
if [ "" -eq "$AGENT_PID" ]; then
    if read -sq "YN?Do you want to unlock your ssh keys?"; then
        echo ""
        output=`$AGENT_BIN | sed 's/echo/#echo/g'`
        eval $output
        $AGENT_ADD_BIN
    fi
else
    for f in "/proc/"*
    do
        cmdline=`cat "$f/cmdline"`
        if [ "${AGENT_BIN}" -ef "${cmdline}" ]; then
            export SSH_AUTH_SOCK=`cat $f/net/unix | grep --binary-file=text -oP '((/[^/]*?)+/ssh-[^/]+/agent\.\d+$)'`
            export SSH_AGENT_PID=${f##*/}
            break;
        fi
    done
fi

1
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

এখানে creditণ প্রদান: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html

এই সমাধানটি এখানেও সমর্থন করা হয়েছে: http://mah.everybody.org/docs/ssh


1

এসএসএইচের সমাধানে একক সাইন আমাকে নিয়ে যেতে পারে pam_ssh

এই নিবন্ধ অনুসারে , ধারণাটি হ'ল:

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


এটি করা খুব সহজ, আপনি মূলত আপনার অন্য মেশিনগুলিতে নিজেকে প্রমাণ করার জন্য একটি পাবলিক / প্রাইভেট কী জুড়ি তৈরি করেন, তারপরে আপনার সমস্ত লিমিটেড অ্যাক্সেসের জন্য একটি সিগন সলিউশন সরবরাহ করে লগ-ইন করার পরে পিএএম কোনও এজেন্টকে আপনার কীগুলি লোড করতে সহায়তা করে মেশিন। এই গাইডটি সেট আপ করার মাধ্যমে আপনাকে চলবে।

আমি যাচাই করেছি না এটি আসলে কাজ করবে।


0

এটি আপনার ~/.bashrcফাইলে যুক্ত করুন:

ssh-add -L|grep identities > /dev/null && ssh-add /path/to/ssh/private/key

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

0

একটি (সম্ভবত পাসওয়ার্ডহীন) কী যুক্ত করতে এবং এটি নিশ্চিত করতে যে ssh-addকোনও পাসওয়ার্ডের জন্য প্রম্পট করবে না, যাই হোক না কেন, এক্স এর অধীনে চলার সময়ও :

DISPLAY= ssh-add -k /path/to/key </dev/null &>/dev/null

প্রস্থান স্থিতি সাফল্য বা ব্যর্থতা নির্দেশ করে।


0

আপনি যদি নিজের পাসওয়ার্ড ম্যানেজার হিসাবে সমুদ্র ঘোড়া চালাচ্ছেন ... যা আপনি সম্ভবত; ডি

আপনি যে লক্ষ্যটি সন্ধান করছেন তা অর্জন করে এমন আরেকটি সমাধান হ'ল লগ-ইন করার পরে স্বয়ংক্রিয়ভাবে আনলক করার জন্য সিহর্স-এ ssh কীগুলি যুক্ত করা। এর প্রধান সুবিধাটি হ'ল আপনি জিডিএম এর মাধ্যমে লগইন করার পরে কীগুলির জন্য কখনও পাসওয়ার্ড প্রবেশ করতে হবে না বা কীগুলির পাসওয়ার্ড থাকা সত্ত্বেও আপনার লগ ইন করা যাই হোক না কেন। এটি ব্যক্তিগত কী এবং সর্বজনীন কী উভয়েরই প্রয়োজন। তাদের সমুদ্রের ঘোড়ার নামকরণের সম্মেলনও অনুসরণ করা উচিত। ডিফল্ট গ্রহণযোগ্য (প্রাইভেট কী ও সার্বজনীন কী-এর জন্য id_rsa.pub জন্য id_rsa ... সত্যিই কিছু হয় না privatekeyname এবং privatekeyname.pub )

লগ ইন করার পরে স্বয়ংক্রিয়ভাবে আনলক করার জন্য আপনাকে সমুদ্রের নিকটে ssh কী যুক্ত করতে; (ফেডোরা 25-তে, আমি নিশ্চিত নই যে পথটি অন্য ডিস্ট্রোজে কোথায় রয়েছে যদিও এর সর্বাধিক সম্ভবত খুব মিল রয়েছে)

/lib64/seahorse/seahorse-ssh-askpass /path/to/keys/here

আমার জন্য, এটা ছিল

/lib64/seahorse/seahorse-ssh-askpass ~/.ssh/id_rsa

(সমুদ্রের ঘোড়া স্বয়ংক্রিয়ভাবে ধরে নেবে যে আমার ক্ষেত্রে সর্বজনীন কীটি id_rsa.pub ছিল)

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

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

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


0

এখানে চূড়ান্ত লিপি।

আপডেট $ PASSW, তারপরে এটি আপনার টার্মিনালে অনুলিপি করুন

# <sshpass> via typinator
# Updated: 2017-01-18_21h36
#
# apt-get update -y; apt-get install expect -qy

# Pass this value to ssh-add
PASSW="myfancypass123"

# Define a name for this script
THIS_SCRIPT="$(date +%Y-%m-%d_%H-%M-%S-%N)".sh

# Create a fresh directory to work from / Clean up
rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la


# Output our bash script file - BEGIN
cat <<< '
#!/bin/bash

set -u     # Stop if an unbound variable is referenced
set -e     # Stop on first error
export HISTIGNORE="expect*";

# Normal CMDs
echo && echo "The process should take about 10 seconds:" && echo
eval "$(ssh-agent -s)"; sleep 0.5;

# Define VAR passed when this bash-script was launched
password="$@"

# Launch the expect magic
expect -c "
    spawn ssh-add /root/.ssh/id_rsa
    expect "?assword:"
    send \"$password\r\"
    expect "?password:"
    send \"$password\r\"
    expect eof"

export HISTIGNORE="";
export password="";
' > $THIS_SCRIPT
# Output our bash script file - END


# Ensure we are in the right path
cd ~/temp; ls -la; sleep 1;

# Run the bash script
chmod +x ./$THIS_SCRIPT; ./$THIS_SCRIPT "$PASSW"; unset password;

# Clean up
rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la

0

আমি সচেতন হওয়ার সেরা উপায়টি হ'ল আমি পূর্ববর্তী কাজ থেকে অভিযোজিত পিএএম লগইন স্ক্রিপ্টটি ব্যবহার করা কারণ আমি এই প্রশ্নের সন্তোষজনক উত্তর খুঁজে পাই না।

আপনার পাসফ্রেজটি আপনার সিস্টেমের পাসওয়ার্ড এবং একটি ভারী ডেরাইভেশন ফাংশন সহ এনক্রিপ্টযুক্ত সঞ্চিত হয়। লগইন করার সময় আপনার সিস্টেমের পাসওয়ার্ডটি আপনার পাসফ্রেজটি ডিক্রিপ্ট করে এজেন্টে যুক্ত করতে ব্যবহৃত হয়।

https://github.com/capocasa/systemd-user-pam-ssh

উপস্থাপিত প্রতিটি অন্যান্য সমাধানের সুবিধাটি হ'ল এটি শূন্য প্রয়াসের সাথে বুট করার সময় ম্যানুয়ালি ssh-add চালানোর সমতুল্য সুরক্ষা একত্রিত করে। এটির জন্য কোনও অতিরিক্ত সরঞ্জামের প্রয়োজন নেই এবং একটি অতিরিক্ত নির্ভরতা রয়েছে যা বেশিরভাগ সিস্টেমে ডিফল্টরূপে ইনস্টল করা হয়েছে (ওপেনএসএসএল)।


0

ম্যাকোস-এ আমার সেটআপটি অনুসরণ হিসাবে রয়েছে (ইন .zshrcবা .bash_profileব্যাশ ভাবারীদের জন্য):

# Kill then Load the ssh-agent and set the necessary env variables it outputs
sshRestart() {
    # if all else fails
    # pkill -u $(whoami) ssh-agent;

    if [ -n "$SSH_AUTH_SOCK" ] ; then
        eval `/usr/bin/ssh-agent -k`
    fi
    eval `ssh-agent -s`
    ssh-add ~/.ssh/YOUR_KEY_FILE
    echo "Restarted SSH agent"
}

if [ -z "$SSH_AUTH_SOCK" ] || [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]] ; then
    eval `ssh-agent -s` > /dev/null 2>&1
    ssh-add ~/.ssh/YOUR_KEY_FILE > /dev/null 2>&1
fi

|| [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]]কারণ ডিফল্ট মান হল অংশ MacOS উপর প্রয়োজনীয় /private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners। অন্যথায় @ থমাস নাইম্যানের বিস্তৃত উত্তর ব্যর্থ হয় কারণ $SSH_AUTH_SOCKসর্বদা কিছুতে সেট করা থাকে।

তারপরে .zlogout(বা .bash_logoutবাশ লোকের জন্য):

if [ -n "$SSH_AUTH_SOCK" ] ; then
    eval `/usr/bin/ssh-agent -k`
fi

ম্যাকোস মোজভেভ 10.14.5 এ পরীক্ষিত

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