ssh- এজেন্ট এবং পর্দা


8

স্ট্যাক ওভারফ্লোতে কিছুক্ষণ আগে, আমি এই প্রশ্নটি ssh- এজেন্ট এবং ক্রন্টব সম্পর্কে জিজ্ঞাসা করেছি । লিনাক্স সিস্টেমে ssh-এজেন্ট এবং স্ক্রিন সম্পর্কে আমার এখন একই ধরণের প্রশ্ন রয়েছে।

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

আমি ssh-key সঠিকভাবে সেট আপ করতে চাই তাই আমার কোনও এসএনএন আপডেট বা প্রতিশ্রুতি দেওয়ার সময় আমার পাসওয়ার্ড একাধিকবার প্রবেশ করতে হবে না। আমি প্রতি সেশনে আমার পাসফ্রেজটি টাইপ করে খুশি এবং আমি আমাদের দলকে পাসওয়ার্ড-কম এসএস-কী থাকা থেকে নিরুৎসাহিত করি।

সংক্ষিপ্ত জ্বলজ্বল মুহুর্তের জন্য, মনে হয়েছিল আমার "বাশ_প্রফাইলে" eval `ssh-एजেন্ট -s`" করার মতো, যখন আমি লগ আউট করেছি তখন ssh-এজেন্টকে মেরে ফেলার নির্দেশ দিয়ে পেয়ার করা কাজ করবে। যাইহোক, আমরা দীর্ঘ-চলমান ইন্টারেক্টিভ প্রোগ্রামগুলি এবং বিকাশের পরিবেশগুলি পরিচালনা করতে পর্দার ভারী ব্যবহার করি । আমি যদি স্রেফ বর্ণিত হিসাবে এসএসএল-এজেন্টটি শুরু ও বন্ধ করে দিই, তবে আপনি টার্মিনাল থেকে বেরিয়ে যাওয়ার পরে এটি মারা যায় এবং স্ক্রিনের সাব-সেশনগুলি যা এই এসএসএল-এজেন্টের উদাহরণ হিসাবে উল্লেখ করা হত তা পরিত্যাগ করা হবে।

সুতরাং ... আমি কীভাবে কনসোল ব্যবহারকারী হতে পারি, যিনি পর্দা ব্যবহার করেন, যিনি তার এসএস-কীগুলির সাথে একটি পাসওয়ার্ড ব্যবহার করেন, যাঁকে ক্রমাগত পাসফ্রেজ টাইপ করতে হয় না?

উত্তর:


4

নিম্নলিখিত সেটআপের সাথে, অনুরোধ করার জন্য আপনার কোনও মোড়কের প্রয়োজন হবে না screen। তদতিরিক্ত, এটি ব্যবহার করা এড়িয়ে যায় /tmp(ফলস্বরূপ সুরক্ষা ঝুঁকির সাথে)।

  1. আপনার একটি ~ / tmp ডিরেক্টরি রয়েছে তা নিশ্চিত করুন:

    mkdir ~/tmp
    
  2. যোগ .screenrcনিম্নলিখিত লাইন:

    setenv SSH_AUTH_SOCK "$HOME/tmp/ssh-agent-screen"
    
    • এটি নিশ্চিত করে যে ভিতরে screen, sshএকই স্থানে সবসময় সকেট বদলে একটি পরিবর্তন পথ খোঁজে।
    • আপনি setenvযে কোনও শেল ব্যবহার করুন আপনাকে অবশ্যই এটি ব্যবহার করতে হবে, কারণ এটি একটি স্ক্রিন এবং শেল কমান্ড নয়।
  3. যোগ .bash_profileনিম্নলিখিত লাইন:

    [ -n "$SSH_AUTH_SOCK" ] && [ "$SSH_AUTH_SOCK"!="$HOME/tmp/ssh-agent-screen" ] && ln -sf "$SSH_AUTH_SOCK" "$HOME/tmp/ssh-agent-screen"
    
    • এটি স্থির অবস্থান (যেখানে sshদেখায়) থেকে আসলটির সাথে লিঙ্ক করবে এবং শুরু করার পরে অবশ্যই উপস্থিত হবে ssh-agent
    • সেট না করা [ -n "$SSH_AUTH_SOCK" ]হলে সঠিকভাবে ব্যবহার করা ত্রুটিগুলি রোধ করবে SSH_AUTH_SOCK
    • [ "$SSH_AUTH_SOCK"!="$HOME/tmp/ssh-agent-screen" ]যদি স্ক্রিন সূত্র হয় তবে স্ক্রিন সেশনগুলি $ হোম / টিএমপি / এসএসএইচ-এজেন্ট-স্ক্রিনকে নিজের সাথে সংযুক্ত করা রোধ করবে .bash_profile
  4. এর পরিবর্তে শুরু ssh-agentমধ্যে .bash_profile, আপনি সাথে সংযোগ বিবেচনা করতে পারেন ssh -A(ব্যবহারের এজেন্ট ফরওয়ার্ডিং এবং দূরবর্তী মেশিন ব্যবহার আপনার এজেন্ট)।

এই সেটআপের পরে, আপনি কেবলমাত্র স্ট্যান্ডার্ড স্ক্রিন কমান্ড ব্যবহার করতে পারেন। আপনার কেবলমাত্র বিদ্যমান সেশনগুলি পুনরায় তৈরি করতে হবে বা ম্যানুয়ালি তাদের মধ্যে এসএসএইচ_এইউথ_সোককে পদক্ষেপ 2 এর স্থির স্থানে সেট করতে হবে।

ধারণার জন্য এই ওয়েবসাইটে ক্রেডিট ; আমি ব্যবহার এড়ানো /tmpএই উত্তরটি একই রকম তবে অতিরিক্ত উপাত্ত ব্যবহার করে।


2

আপনি কি পরিবর্তে কোনও ইনসক্রিপ্ট থেকে এসএসএল-এজেন্ট চালু করতে পারেন .bash_profile? উদাহরণস্বরূপ, আমি লাগাতে পারে

su -c 'ssh-agent -s > ~/.ssh_agent_env' myusername

এর যথাযথ অংশে /etc/conf.d/local, যদিও আরএইচইএল / ফেডোরা সম্ভবত ভিন্ন সিস্টেম ব্যবহার করে। আপনি যেমন আপনার মন্তব্যে উল্লেখ করেছেন, টার্মিনাল সেশনগুলির এজেন্টের সাথে সংযোগ স্থাপনের জন্য সক্ষম হওয়া প্রয়োজন, এ কারণেই সেই আদেশটি .ssh_agent_envব্যবহারকারীর হোম ডিরেক্টরিতে ফাইল তৈরি করে । তারপরে আপনি যুক্ত করতে পারেন

[ -f ~/.ssh_agent_env ] && source ~/.ssh_agent_env >/dev/null

মধ্যে .bash_profile

আর একটি জিনিস যা আপনি করতে পারেন তা হ'ল নিম্নলিখিতটি প্রবেশ করানো .bash_profile

ps -U myusername | grep -q ssh-agent || ssh-agent -s > ~/.ssh_agent_env
source ~/.ssh_agent_env >/dev/null

ssh-agentএটি ইতিমধ্যে চালু না হলে কেবল শুরু হবে । তাহলে আপনাকে এটি মারতে হবে না।

দ্বিতীয় পরামর্শের সামান্য ভিন্ন বিকল্প হিসাবে কোনও ssh-agentপ্রক্রিয়াটির অস্তিত্ব পরীক্ষা করার পরিবর্তে আপনি ফাইলটির অস্তিত্ব পরীক্ষা করতে পারেন ~/.ssh_agent_env,

[ -f ~/.ssh_agent_env ] || ssh-agent -s > ~/.ssh_agent_env
source ~/.ssh_agent_env >/dev/null

যদি সবকিছু ঠিকঠাকভাবে কাজ করে তবে দুটি উপায়ের মধ্যে কোনও উল্লেখযোগ্য পার্থক্য হওয়া উচিত নয়।


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

@ খেড্রন: হ্যাঁ, তবে /etc/conf.d/localএজেন্ট ব্যবহারকারী প্রতিটি ব্যবহারকারীর জন্য পৃথক ssh-agentপ্রক্রিয়া শুরু করতে আপনাকে প্রতিটি লাইন (বা আপনার সমতুল্য) রাখতে হবে। যদি আপনি বলেন যে আপনার কাছে প্রচুর সংখ্যক ব্যবহারকারী না রয়েছে তবে এটি খুব খারাপ হবে না। আপনি এজেন্টের সাথে সংযুক্ত টার্মিনাল সেশন সম্পর্কে একটি ভাল পয়েন্ট উত্থাপন করেন (যা আমি বিবেচনা করতে ভুলে গিয়েছিলাম); উত্তরে আমার সম্পাদনা দেখুন।
ডেভিড জেড


2

Ssh এজেন্ট ফরওয়ার্ডিং ( -Aবিকল্প) ব্যবহার করা একটি আরও ভাল পদ্ধতির । এটি ssh ব্যবহারকারী ব্যক্তিকে মেশিনে চালিত ssh-এজেন্টের চাবি ব্যবহার করতে সহায়তা করে সম্ভবত তারা যে ওয়ার্কস্টেশনটিতে বসেছেন সম্ভবত।


এটি এমন কোনও আক্রমণকারীকেও অনুমতি দেয় যা আপনার অ্যাকাউন্টকে অন্য মেশিনগুলিতে যে এজেন্ট অ্যাক্সেস করতে পারে সেগুলিতে অ্যাকাউন্টগুলির সাথে আপস করে ises আমি তাই কমপক্ষে ssh এজেন্ট ফরওয়ার্ডিং রাখার চেষ্টা করি।
পল দাম

2

ssh এজেন্ট ফরওয়ার্ডিংয়ে অনুসরণ করতে, আপনি আবিষ্কার করতে পারবেন যে ডিফল্টরূপে ফরওয়ার্ড হওয়া এসএস শংসাপত্রগুলি একবার আপনার লগ আউট, লগ ইন, এবং আপনার সেসিশনে পুনরায় সংযুক্ত করার পরে আপনার স্ক্রিন সেশনে উপলব্ধ হবে না।

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

আমি এই শেল ফাংশনটি স্ক্রিনটি পুনরায় প্রবেশ করতে এবং এসএসএইচ সোথ ঠিক করার জন্য ব্যবহার করি:

function sr () { 
    if [ ${+STY} = 1 ] ;then 
            echo already in screen\!
    else
            if [ "${SSH_AUTH_SOCK}x" != "x" ]; then
                    if [ ! -d /tmp/screenssh ]; then
                            mkdir /tmp/screenssh 
                    fi
                    rm -f /tmp/screenssh/socket
                    ln -s $SSH_AUTH_SOCK /tmp/screenssh/socket
                    echo $REMIP > /tmp/screenssh/remip
            fi                
            screen -DR
    fi
}

এবং এটি আমার .স্ক্রিনসিআরসি-তে রয়েছে:

setenv SSH_AUTH_SOCK /tmp/screenssh/socket

আশাকরি এটা সাহায্য করবে.


/ টিএমপি ব্যবহারের অর্থ হ'ল মেশিনে থাকা অন্য কেউ আপনার যে কোনও ফাইলকে ক্লোবার করতে পারে, যদি সে তাদের পথটি জানে।
ব্লেজারব্লেড

1

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি কেবল একটি স্ক্রিন সেশন চান যা আপনি মাঝে মাঝে আলাদা করে পুনরায় সংযুক্ত করেন তবে আর কখনও এসএসএল-এজেন্টের (আপনার ব্যক্তিগত কী পাসওয়ার্ড) পাসওয়ার্ড পুনরায় প্রবেশ করতে চান না।

আমি মনে করি সবচেয়ে সহজ উপায় হল পর্দা শুরু করা, সাব শেল দিয়ে এসএসএল-এজেন্ট শুরু করা এবং তারপরে সেই সাব শেলটিতে থাকা থেকে। অর্থাত

screen
ssh-agent bash
ssh-add   # enter your password once

# some commands, some logins and logouts to remote servers via ssh public key

# <ctrl>+<a>, <ctrl>+<d> to detach screen
# you can now logout from this computer
# login again

# reattach to your screen
screen -r
# ssh-agent is still running

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