আমি পুনরায় সংযুক্ত করার সময় কেন আমাকে টিএমউক্সে এনভ ভার্সগুলি পুনরায় সেট করতে হবে?


37

আমি মূলত একটি ম্যাক এবং ssh / tmux আমার লিনাক্স মেশিনের সাথে সংযুক্ত করে কাজ করি। আমার লিনাক্স মেশিনে এসএসএল-এজেন্ট চলছে। আমার আছে

set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY"

আমার মধ্যে .tmux.conf। তবুও, আমি যখনই এই সেশনে পুনরায় সংযুক্ত হই তখন আমাকে দৌড়াতে হয়

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

নতুন tmux উইন্ডোজ $SSH_AUTH_SOCKসঠিকভাবে সেট করার জন্য । আমি এটি না করতে পছন্দ করব। কোন ধারনা?

হালনাগাদ

আমি মনে করি আমি এটি ভালভাবে ব্যাখ্যা করছি না। রিমোট মেশিনে শেল খোলার জন্য এখানে আমার শেল ফাংশনটি রয়েছে:

sshh () {
    tmux -u neww -n ${host} "ssh -Xt ${host} $*"
}

যখন tmux এই SSH কমান্ড চালায়, $SSH_AUTH_SOCKহয় না সেট, যদিও এটি করা হয় আমার স্থানীয় পরিবেশে সেট। আমি যদি setenvউপরের কমান্ডটি দিয়ে এটি টিএমউক্সের পরিবেশে রাখি , সবকিছু ঠিকঠাক কাজ করে। আমার প্রশ্ন হ'ল কেন আমাকে মোটেও সেটেনভ কমান্ড চালাতে হবে?

আপডেট 2

অধিক তথ্য:

যখন আমি কোনও বিদ্যমান সেশনে সংযুক্ত থাকি তখন $SSH_AUTH_SOCKটিএমউক্স পরিবেশ (বা বৈশ্বিক পরিবেশ) এ সেট করা থাকে না।

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

যদি আমি এটি ম্যানুয়ালি সেট করি তবে জিনিসগুলি কাজ করে:

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

আমি যদি আলাদা করে রেখে আবার সংযুক্ত করি তবে $SSH_AUTH_SOCKসেট না হয়ে ফিরে যায়।


এটি মোটেও এসএসএইচ সম্পর্কে নয়, তাই না? কোন নতুন শেলটিতে আপনার পরিবেশের পরিবর্তনগুলি রয়েছে, তার ফলাফল কী env?
হউক লেগেছে

আপনি ম্যাকটিতে কোন শেল ব্যবহার করছেন? ব্যাশ?
slm

পছন্দ করুন
ক্রিস ডব্লিউ।

@slm আমি zsh ব্যবহার করছি।
ক্রিস ডাব্লু।

বিদ্যমান উইন্ডোজ সম্পর্কে কি? তারা এখনও কাজ?
হউক লেগেইন

উত্তর:


35

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

টিএমউक्स পরিবেশগত পরিবর্তনগুলি সরিয়ে ফেলবে

টিএমউক্সের ম্যান পেজটিতে বলা হয়েছে যে আপডেট-এনভায়রনমেন্টটি ভেরিয়েবলগুলি সরিয়ে ফেলবে "যেগুলি উত্স পরিবেশে বিদ্যমান নয় [...] যেনো -r সেট-এনভায়রনমেন্ট কমান্ডকে দেওয়া হয়েছিল"।

স্পষ্টতই যে সমস্যার কারণ। দেখুন নিচের ক্রিস 'প্রতিক্রিয়া । যাইহোক, আমি এখনও ভাবতে পারি না যে পরিবর্তনশীল কীভাবে "উত্স পরিবেশ" এ অনুপস্থিত থাকতে পারে এবং সদ্য নির্মিত tmux উইন্ডোতে বৈধ হতে পারে ...


পূর্ববর্তী উত্তর:

এসএসএইচ ফরওয়ার্ডিং কীভাবে কাজ করে

রিমোট মেশিনে, এসএসএইচ সংযোগ স্থাপনের পরে আপনার শেলের পরিবেশটি একবার দেখুন:

user@remote:~$ env | grep SSH
SSH_CLIENT=68.38.123.35 45926 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=68.38.123.35 48926 10.1.35.23 22
SSH_AUTH_SOCK=/tmp/ssh-hRNwjA1342/agent.1342

এখানে গুরুত্বপূর্ণটি হ'ল SSH_AUTH_SOCK যা বর্তমানে / টিএমপি-তে কিছু ফাইলে সেট করা আছে। আপনি যদি এই ফাইলটি পরীক্ষা করেন, আপনি দেখতে পাবেন এটি একটি ইউনিক্স ডোমেন সকেট - এবং আপনি যে সংযোগে সংযুক্ত ছিলেন সেটির নির্দিষ্ট উদাহরণের সাথে এটি সংযুক্ত। গুরুত্বপূর্ণভাবে, প্রতিবার আপনি সংযুক্ত হওয়ার সাথে সাথে এটি পরিবর্তিত হয়।

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

সমাধান

যেহেতু আমরা জানি যে সমস্যাটি বর্তমানে জীবিত এসএসএইচ প্রমাণীকরণের সকেটটি কোথায় তা জানার সাথে জড়িত, তাই আসুন আমরা এটি অনুমানযোগ্য স্থানে রাখি!

রিমোট মেশিনে আপনার .bashrc বা .zshrc ফাইলে, নিম্নলিখিতগুলি যুক্ত করুন:

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    rm -f /tmp/ssh-agent-$USER-screen
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

আমি মনে করি না এমনকি আপনার tmux.conf এ আপনাকে একটি 'আপডেট-এনভায়রনমেন্ট কমান্ড' দিতে হবে। ম্যান পৃষ্ঠা অনুসারে , এসএসএইচ_এউথ_সোক ইতিমধ্যে ডিফল্টরূপে আচ্ছাদিত।

ধার

আমার প্রতিক্রিয়া হ'ল মার্ক 'xb95' স্মিথের এই ব্লগ পোস্টটির একটি অংশ যা স্ক্রিনের জন্য একই সমস্যাটি ব্যাখ্যা করে ।


আপনার চিন্তাশীল প্রতিক্রিয়া জন্য আপনাকে ধন্যবাদ। আমার প্রশ্নটি $SSH_AUTH_SOCKনতুন শেলগুলিতে আমার সেট করার বিষয়ে নয় , এটি $SSH_AUTH_SOCK.bashrc / .zshrc উত্সাহিত হওয়ার আগে নতুন tmux উইন্ডোতে সেট করা সম্পর্কে ।
ক্রিস ডাব্লু।

@ChrisW। আমি ধরে নিয়েছি যে স্ক্রিপ্টটি দূরবর্তী মেশিনে আপনার লগইন শেলের আরসি ফাইলে রাখা উচিত। আপনি লগইন করলে একটি নতুন শেল তৈরি হয়, এসএসএইচ_এইউথ_সোক পরিবর্তন এবং রফতানি হয় । আপনি যখন tmux শুরু করবেন, তখন এটি প্যারেন্ট পরিবেশ থেকে SSH_AUTH_SOCK উত্তরাধিকার সূত্রে প্রাপ্ত হবে। যেহেতু এসএসএইচ_এইউথ_সোকের মান এখন স্থির হয়ে গেছে, তাই টিএমউসকে পরবর্তী লগইনগুলিতে কাজ করা উচিত ... সম্ভবত আমি সমস্যার ভুল
বুঝেছি

আমার অনুমান যে আমার বিভ্রান্তি সেই পরিবেশ সম্পর্কে যা একটি নতুন উইন্ডো (যেমন tmux neww ssh somehost) এর প্রসঙ্গে tmux দ্বারা ssh পরিচালিত হয় ।
ক্রিস ডাব্লু।

এই পদ্ধতির সাথে একটি সমস্যা হ'ল মেশিনের সাথে ২ য় এসএসএইচ সংযোগটির মানটি ওভাররাইট হবে SSH_AUTH_SOCK। Tmux সেশনটি সর্বাধিক সাম্প্রতিক এসএসএইচ সংযোগের মাধ্যমে উন্মুক্ত থাকাকালীনই এই পদ্ধতিটি কার্যকর হয়।
ফিলায়ে

12

আমি এটা বুঝতে পেরেছি। সংক্ষিপ্ত উত্তর, আমি এখান SSH_AUTH_SOCKথেকে সরানো প্রয়োজন update-environment। যেহেতু এটি সেই তালিকায় ছিল তাই প্রতিবার আমি আবার যোগ করার সময় এই মানটি উড়িয়ে দেওয়া হচ্ছিল। ক্লুটির জন্য @ ডিজেএফকে ধন্যবাদ update-environmentবিভাগে tmux (1) ম্যান পৃষ্ঠা থেকে প্রধান বিট :

উত্স পরিবেশে বিদ্যমান না এমন কোনও ভেরিয়েবল সেশন পরিবেশ থেকে সরিয়ে ফেলা হয়েছে (যেন -r সেট-এনভায়রনমেন্ট কমান্ডকে দেওয়া হয়েছিল)।


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

@ChrisW। সংক্ষিপ্ত উত্তরগুলি মাঝে মাঝে দুর্দান্ত হয় তবে আপনি কি দয়া করে দীর্ঘ উত্তর দিতে পারেন? আমি এটি কাজ করার সাথে লড়াই করছি এবং এই পোস্টে কিছুই আমার পক্ষে কাজ করছে না।
redbmk

@sorin @redbmk এর জন্য দুঃখিত এটির .tmux.confকাজটি পেতে আমার একমাত্র লাইনটি পরিবর্তন করতে হয়েছিল : set -g update-environment "SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY" আপনি কি sshসাধারণভাবে পরিবেশের পরিবর্তনশীলগুলির সাথে সমস্যা দেখছেন ?
ক্রিস ডব্লিউ।

2

আমার এসএসএল-এজেন্টকে হ্যান্ডেল করতে tmux ব্যবহার করার পরিবর্তে, আমি এটির সাথে ব্যাশ হ্যান্ডেল করেছি:

### SSH Agent ### {{{
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 -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
  else
    start_agent;
fi
### End SSH Agent ### }}}

আমার এটি আমার ash / bashrc এ আছে এবং এটি দুর্দান্ত কাজ করে।


$SSH_AUTH_SOCKআমার শাঁস মধ্যে সঠিকভাবে সেট করা হয়, কিন্তু যখন আমি ভালো কিছু করতে tmux neww ssh somehost, আমি আমার পাসফ্রেজ আমার ব্যক্তিগত কী আনলক করতে চাওয়া হবে, যদি না আমি চালানোর tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK
ক্রিস ডাব্লু।

1

আমি স্ট্যাকওভারফ্লো https://stackoverflow.com/a/49395839/241025 এ অনুরূপ প্রশ্নের উত্তর দিয়েছি । যেহেতু এই পৃষ্ঠাটি আমার গুগল অনুসন্ধানে প্রথম স্থান পেয়েছে, তাই আমি এর সংক্ষিপ্ত সংস্করণটি এখানে পোস্ট করতে চেয়েছিলাম।

প্রতিটি টিএমউক্স সেশনটি কাস্টম এনভায়রনমেন্ট ভেরিয়েবলের সেট করতে, আপনাকে টিএমউক্সের প্রতি সেশন এনভায়রনমেন্ট ভেরিয়েবলের মান যুক্ত করতে হবে। এটি কীভাবে করা যায় তার একটি উদাহরণ এখানে।

tmux new-session -s one
tmux setenv FOO foo-one
export FOO='foo-one'

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


0

ডিজেএফের ব্যাখ্যাটি আমার মনে আরও একটি সম্ভাব্য সমাধান এনেছে:

আগে tmux/ screenচলমান:

  1. লগ ইন
  2. একটি উদাহরণ শুরু করুন ssh-agent
  3. এর জন্য পরিবেশ পরিবর্তনশীল (গুলি) দিয়ে tmux/ শুরু করুন ।screenssh-agent

এটি ক্লায়েন্টের কাছে এসএসএইচ ফরওয়ার্ডিং ব্যবহার করতে পারেনি তবে এটির জন্য জিজ্ঞাসা করা হয়নি।


1
ssh-agentটিটিওয়াইয়ের সাথে আবদ্ধ হয় না, এটি লগআউটে কেন হত্যা করা উচিত (?) - কেন ব্যবহার করা হচ্ছে nohup?
পোয়েজ

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