লগইনে ssh-এজেন্ট শুরু করুন


261

আমার কাছে একটি এসএসএইচ ওরফে ব্যবহার করে বিটবকেট ডট কম থেকে রিমোট গিট রেপো টানছে। আমি নিজের সার্ভারে ম্যানুয়ালি এসএসএল-এজেন্ট শুরু করতে পারি তবে এসএসএইচ এর মাধ্যমে প্রতিবার লগইন করে আমাকে এটি করতে হবে।

আমি ম্যানুয়ালি ssh- এজেন্ট শুরু:

eval ssh-agent $SHELL

তারপরে আমি এজেন্ট যুক্ত করব:

ssh-add ~/.ssh/bitbucket_id

তারপরে এটি প্রদর্শিত হয় যখন আমি করি:

ssh-add -l

এবং আমি যেতে ভাল। এই প্রক্রিয়াটি স্বয়ংক্রিয় করার কোনও উপায় কি তাই প্রতিবার লগইন করে আমাকে এটি করতে হবে না? সার্ভারটি রেডহ্যাট 6.2 (সান্তিয়াগো) চলছে।


2
আপনি যখনই লগইন করবেন তখনই আপনি যা কিছু করতে চান তা।
বর্মার

1
আহ! আমি .বাশ_প্রোফাইল ব্যবহার করছিলাম ... .প্রফিল এবং .বাশ_প্রফাইলে কি পার্থক্য আছে?
প্যাথসফোডিজাইন

1
আপনি কেন কমান্ডটি প্রথম স্থানে চালাচ্ছেন তা নিশ্চিত নয়। ssh-agent <command>রান <command>একটি subprocess যেমন ssh-agent, তাই যদি আপনি একটি নতুন শেল শুরু করছেন। আমি মনে করি আপনি চান eval ssh-agent
বর্মার

9
.bash_profileব্যাশের জন্য নির্দিষ্ট, .profileসমস্ত পসিক্স শেলগুলির জন্য জেনেরিক। bashপ্রথমে অনুসন্ধান করবে .bash_profile, তারপরে ডিফল্ট হবে .profile
বর্মার

5
ssh-agent"স্ট্যান্ডার্ড" (পসিক্স-সামঞ্জস্যপূর্ণ) শেলের জন্য স্প্যান করার সঠিক উপায়টি eval $(ssh-agent -s)। লগ আউট করার সময় আপনাকে এজেন্টকে যথাযথভাবে মুক্তি দিতে হবে তা নিশ্চিত করতে হবে, সুতরাং এজেন্টটি শুরু হওয়া লাইনের পরে trap 'kill $SSH_AGENT_PID' EXITআপনার নিজের মধ্যে রাখার পরামর্শ দেওয়া উচিত .profile
kostix

উত্তর:


368

এই নিবন্ধটি মাধ্যমে দয়া করে যান। আপনি এটি খুব দরকারী খুঁজে পেতে পারেন:

http://mah.everybody.org/docs/ssh

উপরের লিঙ্কটি যদি কোনও দিন অদৃশ্য হয়ে যায় তবে আমি নীচের সমাধানটির মূল অংশটি ক্যাপচার করছি:

ড্যানিয়েল স্টারিনের মাধ্যমে জোসেফ এম রিগলের এই সমাধান:

আপনার নিম্নলিখিত এই যোগ করুন .bash_profile

SSH_ENV="$HOME/.ssh/agent-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

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


8
মেশিন পুনঃসূচনা প্রয়োজনীয় নয়। আপনি আপনার বর্তমান শেল সেশনে .bash_profileব্যবহার করে কেবল পুনরায় লোড করতে পারেন source ~/.bash_profile। মেশিন পুনঃসূচনাটিও কাজ করবে কারণ এটি যাইহোক নতুন কনফিগারেশন লোড করবে।
লিটমাস

11
ব্যবহার SSH_ENV="$HOME/.ssh/env"(অর্থাত্ শুধু পরিবেশ / নয়) কেন? sshd ~ / .ssh / এনভায়রনমেন্ট ব্যবহার করে (ম্যান পেজ দেখুন: পারমিট ইউজার-এনভায়রনমেন্ট)। গিথুব
অ্যান্ড্রু মারফি

7
এই স্ক্রিপ্টটি আমার জন্য কাজ করেছিল যখন আমি এটিকে আমার ~ / .bashrc ফাইলটিতে রাখি (আমার ~ /। প্রোফাইলে বা ~ / .bash_profile নয়)। আমি যখন প্রথম কোনও স্থানীয় কনসোলটি খুলি তখন এটি পাসফ্রেজের জন্য অনুরোধ জানায়, সমস্ত বিন্দুটি বিনা অনুরোধে বিন্দু থেকে কাজ করে। চিয়ার্স।
অ্যান্ড্রু পেট

3
.Bashrc এ ssh-agentস্টার্ট কমান্ড যুক্ত করলে scpকমান্ডটি কাজ করবে না।
দাজনভু

5
এখনও বিরক্তিকর ... আপনি লগ ইন করার সময় আপনাকে এইটি করতে হবে ... আপনি এসএসএস ব্যবহার না করলেও। প্রতিবার ssh বলা হওয়ার পরে এই অগ্নিটি বন্ধ করা দরকার ... এবং আদর্শভাবে, আপনাকে কী কী হোস্টগুলি চাপায় তা কনফিগার করতে সক্ষম হওয়া উচিত।
এরিক অ্যারোনস্টি

97

আর্চ লিনাক্সে, নিম্নলিখিতগুলি সত্যই দুর্দান্ত কাজ করে (সমস্ত সিস্টেম ভিত্তিক ডিস্ট্রোগুলিতে কাজ করা উচিত):

নিম্নলিখিতগুলি প্রয়োগ করে একটি সিস্টেমযুক্ত ব্যবহারকারী পরিষেবা তৈরি করুন ~/.config/systemd/user/ssh-agent.service:

[Unit]
Description=SSH key agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

সকেটের জন্য পরিবেশের পরিবর্তনশীল রাখতে শেল সেটআপ করুন ( .bash_profile, .zshrc, ...):

export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"

পরিষেবাটি সক্ষম করুন, যাতে এটি লগইনে স্বয়ংক্রিয়ভাবে শুরু হবে এবং এটি শুরু করুন:

systemctl --user enable ssh-agent
systemctl --user start ssh-agent

আপনার স্থানীয় ssh কনফিগারেশন ফাইলে নিম্নলিখিত কনফিগারেশন সেটিংস যুক্ত করুন ~/.ssh/config(এটি এসএসএইচ 7.2 এর পরে কাজ করে):

AddKeysToAgent  yes

এটি ssh ক্লায়েন্টকে সর্বদা চলমান এজেন্টের চাবি যুক্ত করতে নির্দেশ দেবে, সুতরাং এটি আগে এসএসএস-যুক্ত করার দরকার নেই।


3
উবুন্টুতে এটি করার চেষ্টা করার সময় আমি এই মন্তব্যটি পেয়েছি। স্টার্টআপ স্ক্রিপ্টগুলিতে কিছু হ্যাক করার চেয়ে অন্তর্নিহিত সিস্টেমগুলির সাথে এটি আরও সুন্দরভাবে খেলতে দেখা যাচ্ছে, সিস্টেমটি কীভাবে কাজ করা উচিত সে সম্পর্কে আমার জ্ঞানটি দেওয়া হলেও given
xiterion

আমি এটি উবুন্টু 16.04 এলটিএসে চেষ্টা করেছি। দুর্ভাগ্যক্রমে, প্রতিটি শেল প্রক্রিয়া তার স্বতন্ত্র ssh-agentপ্রক্রিয়া চায় । ডক্সগুলি পড়ার পরেও আমার জ্ঞানের অভাব রয়েছে।
দাইসুক আরমাকি

আপনি টাইপ = সাধারণও ব্যবহার করতে পারেন । wiki.archlinux.org/index.php/…
হান্স-জে। শ্মিড

2
সুতরাং এই সমাধানটি মূলত একটি সিস্টেমড পরিষেবাদি ইনস্টল / কনফিগার করছে (তবে কেবল ব্যবহারকারীর জন্য)?
ট্রেভর বয়ড স্মিথ

এটি SSH_AGENT_PIDপরিবেশের পরিবর্তনশীল সেট করবে না , যদিও :(
মিঃ মেসজারোস

73

পুরানো প্রশ্ন, কিন্তু আমি একই পরিস্থিতি পেরিয়ে এসেছি। উপরের উত্তরটি যা প্রয়োজন তা সম্পূর্ণরূপে অর্জন করেছে বলে মনে করবেন না। নিখোঁজ টুকরা হ'ল keychain; এটি ইতিমধ্যে না থাকলে এটি ইনস্টল করুন।

sudo apt-get install keychain

তারপরে আপনার সাথে নিম্নলিখিত লাইনটি যুক্ত করুন ~/.bashrc

eval $(keychain --eval id_rsa)

এটি ssh-agentএটি চালু না থাকলে এটি শুরু হবে , এটি থাকলে এটির সাথে সংযোগ স্থাপন করুন, ssh-agentআপনার শেলটিতে পরিবেশের ভেরিয়েবলগুলি লোড করুন এবং আপনার ssh কীটি লোড করুন।

id_rsaআপনি যে কোনও ব্যক্তিগত কী ~/.sshলোড করতে চান তাতে পরিবর্তন করুন ।

উল্লেখ

/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


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

যোগ Eval keychain --eval id_[yourid file]করার .bashrc
xelber

4
স্ট্যাকওভারফ্লো মন্তব্য ফর্ম্যাটিংয়ের কারণে আমি কোনও সমাধান অনুসন্ধান করতে 20 মিনিট ব্যয় করেছি। প্রতি উপরে xelber এর মন্তব্য, সঠিক সমাধান eval `keychain --eval id_[yourid file]`করতে .bashrc। চলমান এসএস-এজেন্ট অ্যাক্সেসের জন্য বর্তমান শেলের পরিবেশগত পরিবর্তনশীলগুলি মূল্যায়নের জন্য ব্যাকটিকগুলি প্রয়োজন।
জেমস

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

4
থেক্স, এটি এখন পর্যন্ত সবচেয়ে মার্জিত সমাধান।
গ্রিনস্প্যান্ড

36

গৃহীত সমাধানের নিম্নলিখিত ত্রুটি রয়েছে:

  • এটি বজায় রাখা জটিল;
  • এটি স্টোরেজ ফাইলের মূল্যায়ন করে যা ত্রুটি বা সুরক্ষা লঙ্ঘনের কারণ হতে পারে;
  • এটি এজেন্ট শুরু করে তবে এটি থামায় না যা জ্বালাতে কী ছেড়ে যাওয়ার সমতুল্য।

যদি আপনার কীগুলিতে পাসওয়ার্ড টাইপ করার প্রয়োজন না হয় তবে আমি নিম্নলিখিত সমাধানের পরামর্শ দিই। আপনার .bash_profile একেবারে শেষের দিকে নিম্নলিখিতটি যুক্ত করুন (আপনার প্রয়োজনে কী তালিকার সম্পাদনা করুন):

exec ssh-agent $BASH -s 10<&0 << EOF
    ssh-add ~/.ssh/your_key1.rsa \
            ~/.ssh/your_key2.rsa &> /dev/null
    exec $BASH <&10-
EOF

এর নিম্নলিখিত সুবিধা রয়েছে:

  • অনেক সহজ সমাধান;
  • বাশ সেশন শেষ হয়ে গেলে এজেন্ট সেশন শেষ হয়।

এর সম্ভাব্য অসুবিধাগুলি রয়েছে:

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

নোট করুন যে বেশ কয়েকটি ssh-agentপ্রক্রিয়া কোনও অসুবিধা নয়, কারণ তারা বেশি মেমরি বা সিপিইউ সময় নেয় না।


গিট ব্যাশ ব্যবহার করে উইন্ডোজ 10-এ OME হোমের বাইরে একটি ডিরেক্টরিতে এসএসএইচ কী পেয়েছি। এই কাজটি করার জন্য আরএসএর পথ পরিবর্তন করা আমার যা যা করার দরকার ছিল। Tyvm!
kayleeFrye_onDeck

7
আমি যুক্তি দিয়ে বলব যে "যদি আপনার কীগুলি পাসওয়ার্ড টাইপ করার প্রয়োজন না হয় তবে" কীটি ইগনিশনে রেখে যাওয়ার কাছাকাছি সমান।
ব্রুনো ব্রোনোস্কি

কমপক্ষে, এটি আপনার নিজের হোস্টে রয়েছে, নেটওয়ার্কের কোথাও নয়।
মিডেনোক

1
"আমি যুক্তি দেব যে" যদি আপনার কীগুলিতে পাসওয়ার্ড টাইপ করার প্রয়োজন হয় না "তবে কীটি ইগনিশনে রেখে যাওয়ার কাছাকাছি সমান" "<- কীভাবে ব্যাখ্যা করবেন ?? যেহেতু কীগুলি পাসওয়ার্ডের চেয়ে অনেক বেশি নমনীয়, প্রত্যাহার করা সহজ (কী? আপনি কেবল সুডো ব্যবহারকারীদের জন্য সম্পূর্ণ অ্যাক্সেস সহ কী ব্যবহার করছেন? Tsk tsk)। একাধিক ব্যবহারকারীর প্রোফাইলের জন্য কীগুলির একাধিক সেট। আপনি যদি কোনও কিছু স্বয়ংক্রিয় করতে চান (যেমন মোতায়েনের মতো, বা চেকের শেষের দিকে) তবে ভাগ্য নিয়মিত "অর্কেস্টেশন" এর সময় পাসওয়ার্ডে টাইপ করে।
স্কট প্রিভ

2
এটা করবেন না। পাসওয়ার্ডহীন কীগুলি একটি খারাপ অভ্যাস।
ব্যবহারকারী 48678

25

এটি আপনার যুক্ত করুন ~/.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চলমান অবধি যতক্ষণ তা পুনরায় ব্যবহার করতে থাকবে ।


আমাদের যদি একাধিক কী থাকে এবং তাদের নাম না দেওয়া হয় তবে এর পরিবর্তে আমরা কী ব্যবহার করব ~/.ssh/id_rsa? দেখে মনে হচ্ছে ssh-addআপনার উত্তরের অংশটি কীগুলির জন্য ডিফল্ট ফাইলের নাম প্রত্যাশা করে।
গ্যাব্রিয়েল স্ট্যাপলস

হা. আমি বিশ্বাস করি আপনি যদি প্রয়োজন হয় তবে ফাইলের নামগুলি শেষ লাইনের একেবারে শেষের দিকে যুক্ত করতে পারেন
কলিন অ্যান্ডারসন

কিন্তু আপনি এখনও কোনও স্ক্রিপ্ট স্বয়ংক্রিয় করতে পারবেন না ম্যানুয়ালি পাসওয়ার্ড প্রবেশ না করে উদাহরণস্বরূপ গিট স্টাফগুলি টানতে পারে? কীভাবে এড়ানো যায়?
ট্রেনোসিস

7

সুতরাং আমি উপরে বর্ণিত পন্থাগুলি ব্যবহার করতাম, তবে আমার শেষ বাশ সেশন শেষ হওয়ার পরে আমি এক ধরনের এজেন্টকে মরতে পছন্দ করি। এটি অন্যান্য সমাধানগুলির চেয়ে কিছুটা দীর্ঘ, তবে এটি আমার পছন্দসই পদ্ধতি। প্রাথমিক ধারণাটি হ'ল প্রথম বাশ সেশনটি ssh-এজেন্ট শুরু করে। তারপরে প্রতিটি অতিরিক্ত বাশ সেশন কনফিগার ফাইল ( ~/.ssh/.agent_env) এর জন্য পরীক্ষা করে । যদি এটি সেখানে থাকে এবং কোনও সেশন চলছে তবে পরিবেশ উত্স করুন এবং সকেট ফাইলে একটি হার্ডলিঙ্ক তৈরি করুন /tmp(মূল সকেট ফাইলের মতো একই ফাইল সিস্টেমে থাকা প্রয়োজন)। ব্যাশ সেশনগুলি শাট ডাউন করার সাথে সাথে প্রত্যেকের নিজস্ব হার্ডলিঙ্কটি মুছে ফেলা হয়। শেষ অধিবেশনটি দেখতে পাবে যে হার্ডলিঙ্কগুলির 2 টি লিঙ্ক রয়েছে (হার্ডলিংক এবং মূল), প্রক্রিয়াগুলির নিজস্ব সকেট অপসারণ এবং প্রক্রিয়াটি হত্যার ফলস্বরূপ 0 হবে, শেষ বাশ সেশন বন্ধ হওয়ার পরে একটি পরিচ্ছন্ন পরিবেশ রেখে।

# Start ssh-agent to keep you logged in with keys, use `ssh-add` to log in
agent=`pgrep ssh-agent -u $USER` # get only your agents           
if [[ "$agent" == "" || ! -e ~/.ssh/.agent_env ]]; then
    # if no agents or environment file is missing create a new one
    # remove old agents / environment variable files
    kill $agent running
    rm ~/.ssh/.agent_env 

    # restart
    eval `ssh-agent` 
    echo 'export SSH_AUTH_SOCK'=$SSH_AUTH_SOCK >> ~/.ssh/.agent_env             
    echo 'export SSH_AGENT_PID'=$SSH_AGENT_PID >> ~/.ssh/.agent_env             
fi

# create our own hardlink to the socket (with random name)           
source ~/.ssh/.agent_env                                                    
MYSOCK=/tmp/ssh_agent.${RANDOM}.sock                                        
ln -T $SSH_AUTH_SOCK $MYSOCK                                                
export SSH_AUTH_SOCK=$MYSOCK                                                

end_agent()                                                                     
{
    # if we are the last holder of a hardlink, then kill the agent
    nhard=`ls -l $SSH_AUTH_SOCK | awk '{print $2}'`                             
    if [[ "$nhard" -eq 2 ]]; then                                               
        rm ~/.ssh/.agent_env                                                    
        ssh-agent -k                                                            
    fi                                                                          
    rm $SSH_AUTH_SOCK                                                           
}                                                                               
trap end_agent EXIT                                                             
set +x              

যদি আমরা এটিকে অন্য কোনও শেলের লগ-ইন করার জন্য একটি BASH স্ক্রিপ্ট হিসাবে চালিত করি (অন্য কোনও BASH পরে), এটি খুব কাজ করা উচিত, তাই না?
হোইজুই

7

কেবলমাত্র আরও একটি সমাধান যুক্ত করতে: পি, আমি @ স্পেনিক এবং @ কলিন-অ্যান্ডারসনের সমাধানগুলির সংমিশ্রণ নিয়ে চলেছি।

 # Ensure that we have an ssh config with AddKeysToAgent set to true
 if [ ! -f ~/.ssh/config ] || ! cat ~/.ssh/config | grep AddKeysToAgent | grep yes > /dev/null; then
     echo "AddKeysToAgent  yes" >> ~/.ssh/config
 fi
 # Ensure a ssh-agent is running so you only have to enter keys once
 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

কিছুটা মার্জিত হতে পারে তবে এটি সহজ এবং পঠনযোগ্য। এই সমাধান:

  • AddKeysToAgent yesআপনার ssh কনফিগারেশনে রয়েছে তা নিশ্চিত করে যাতে ব্যবহারের পরে কীগুলি স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যায়
  • আপনাকে লগইনে কোনও পাসফ্রেজ প্রবেশের অনুরোধ জানাবে না (আবার প্রথমবারের মতো এক-সময় পাসফ্রেজ প্রবেশ করা হবে)
  • এটি ইতিমধ্যে কোনওটি শুরু না করে থাকলে নিঃশব্দে কোনও এসএস-এজেন্ট শুরু করে

মন্তব্য স্বাগত :)


1
এটি আমার জন্য পুরোপুরি কাজ করেন। কুবুন্টুতে আমি এটি প্রোফাইলে রেখেছি।
শাই

1
AddKeysToAgent yesসেটিং সম্পর্কে জানতে ভাল । ধন্যবাদ।
কলিন অ্যান্ডারসন

3

আমি এই যোগ করে এটি মীমাংসিত , / etc / প্রফাইল - চওড়া সিস্টেম (অথবা ব্যবহারকারীর স্থানীয় করার .profile , অথবা _.bash_profile_):

# SSH-AGENT 
#!/usr/bin/env bash
SERVICE='ssh-agent'
WHOAMI=`who am i |awk '{print $1}'`

if pgrep -u $WHOAMI $SERVICE >/dev/null
then
    echo $SERVICE running.
else
    echo $SERVICE not running.
    echo starting
    ssh-agent > ~/.ssh/agent_env
fi
. ~/.ssh/agent_env

এটি বর্তমান ব্যবহারকারীর জন্য চলমান না থাকলে একটি নতুন ssh- এজেন্ট শুরু করে, বা চলমান থাকলে ssh-এজেন্ট এনভি প্যারামিটারটি পুনরায় সেট করে।


এজেন্ট ইতিমধ্যে চলছে কিনা তা কীভাবে বলার জন্য আপনাকে ধন্যবাদ!
মাইক ম্যাক্সওয়েল

কিভাবে if pgrep -u $WHOAMI $SERVICE >/dev/nullকাজ করে?
জোশ ডেসমন্ড

3

ফিশ শেলের ব্যবহারকারীরা একই কাজ করতে এই স্ক্রিপ্টটি ব্যবহার করতে পারেন ।

# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent                                                                                                                                                                    
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV 
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities                                                                                                                                                                
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ] 
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end  
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end  
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else 
        start_agent
    end  
end

2

আমি এই জন্য ssh- সনাক্তকরণ সরঞ্জাম ব্যবহার।

তার থেকে মানুষ -page:

ssh-شناخت - ssh-এজেন্ট শুরু করুন এবং প্রয়োজনীয় পরিচয় লোড করুন।


1

বহু উত্স থেকে চেষ্টা করা দম্পতি সমাধান কিন্তু সবগুলি খুব বেশি ঝামেলার মতো মনে হয়েছিল। অবশেষে আমি সবচেয়ে সহজ খুঁজে পেয়েছি :)

আপনি যদি এখনও zsh এবং ওহ- মাই- zsh এর সাথে পরিচিত না হন তবে এটি ইনস্টল করুন। তুমি এটা ভালবাসবে :)

তারপরে সম্পাদনা করুন .zshrc

vim ~/.zshrc

এটি pluginsঅধ্যায় এবং ব্যবহার করা এটি আপডেট ssh-agentকরুন যেমন:

plugins=(ssh-agent git)

এবং যে সব! আপনি ssh-agentযখনই নিজের শেলটি শুরু করবেন ততবার আপনি চালিয়ে যাবেন


1

আমি আপনার উত্তর অনেক পছন্দ। এটি cygwin / linuxহোস্ট থেকে কাজ করা অনেক সহজ করে তুলেছে । আমি এটিকে সুরক্ষিত করার জন্য শুরু এবং শেষ ফাংশনগুলিকে একত্রিত করেছি।

SSH_ENV="$HOME/.ssh/.agent_env"

function start_agent {
    echo "Initialising new SSH agent..."

    eval `/usr/bin/ssh-agent`
    echo 'export SSH_AUTH_SOCK'=$SSH_AUTH_SOCK >> ${SSH_ENV}
    echo 'export SSH_AGENT_PID'=$SSH_AGENT_PID >> ${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

# create our own hardlink to the socket (with random name)
MYSOCK=/tmp/ssh_agent.${RANDOM}.sock
ln -T $SSH_AUTH_SOCK $MYSOCK
export SSH_AUTH_SOCK=$MYSOCK

end_agent()
{
    # if we are the last holder of a hardlink, then kill the agent
    nhard=`ls -l $SSH_AUTH_SOCK | awk '{print $2}'`
    if [[ "$nhard" -eq 2 ]]; then
        rm ${SSH_ENV}
        /usr/bin/ssh-agent -k
    fi
    rm $SSH_AUTH_SOCK
}
trap end_agent EXIT
set +x
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.