এসএসএইচ এর মাধ্যমে সংযুক্ত হওয়ার সাথে সাথে আমি কীভাবে স্ক্রিপ্টটি চালাতে পারি?


24

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

<গল্পের>

আমি একজন টেমাক্স এবং ভিএম ব্যবহারকারী। আমি দূরবর্তী ভিমের কাজ পছন্দ করি কারণ যখন কোনও ফ্ল্যাশ মুভি আমাকে কর্নেল প্যানিক দেয় তখন উবুন্টু ডেভলপমেন্ট মেশিনগুলি কিরকিংয়ের বিষয়ে উদ্বিগ্ন হওয়ার দরকার নেই। টিএমউक्स চালানোর অর্থ হল যে আমি পুনরায় বুট করার পরে ওপেন ফাইলগুলি আমার জন্য অপেক্ষা করছে এবং আমি যেখান থেকে ছেড়ে এসেছি সেখান থেকে চালিয়ে যেতে পারি। আমি যখন এই জাতীয় সংযোগ স্থাপন করি তখন টিএমএক্স সেশনে ভিম চালাতে আমার সমস্যা হয়েছিল:

ssh example.com -t 'tmux attach'

ইউটিএফ -8 ইস্যুটি ক্রপ আপ করে যা সাধারণত শেলিংয়ের সময় এবং কেবল ম্যানুয়ালি একটি টিএমক্স সেশনে সংযুক্ত হওয়ার সময় ক্রপ হয় না।

</ গল্পের>

সুতরাং আমি এসএসএস লগিনে কিছু শুরু করার পুনর্ব্যবহারযোগ্য পদ্ধতি চাই যা আমার .zshrc(বা আপনার .bashrcযদি এখনও বাশ ব্যবহার করে) কনফিগার করা আমার অন্যান্য পরিবেশের জন্য প্রয়োজনীয় হতে পারে তবে এটির কোনওরূপে প্রভাব ফেলবে না that আমি মাঝে মাঝে খুব কথিত মেশিনে স্থানীয়ভাবে কাজ করি যখন উপস্থিত হয়।

উত্তর:


13

যখন আপনি চালাতে ssh example.com, SSH ডেমন আপনার জন্য একটি লগ-ইন শেল শুরু এবং লগইন শেল সার্চ আপনার ~/.profile(অথবা ~/.bash_profileবা ~/.zprofileবা ~/.loginআপনার লগইন শেল উপর নির্ভর করে)। আপনি যখন দূরবর্তীভাবে চালানোর জন্য কোনও কমান্ড নির্দিষ্ট করে (সাথে বা তার বাইরে -t), ssh ডিমন একটি সাধারণ শেল শুরু করে, যাতে আপনার .profileপড়া হয় না। প্রতিকার:

ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'

বেশিরভাগ এসএসএইমন ডিমনগুলি ব্যতীত পরিবেশের ভেরিয়েবলগুলি প্রেরণ করতে অস্বীকার করার জন্য কনফিগার করা হয় LC_*। যদি ssh ডিমন example.comএটির অনুমতি দেয় তবে আপনি LC_*tmux স্বয়ংক্রিয়ভাবে শুরু করতে একটি কাস্টম ভেরিয়েবলটিকে অপব্যবহার করতে পারেন - এটি আপনার এতে রাখুন ~/.profile:

if [ -n "$LC_tmux_session" ] && tmux has -t "$LC_tmux_session"; then
  exec tmux attach -t "$LC_tmux_session"
elif [ -n "${LC_tmux_session+1}" ] && tmux has; then
  exec tmux attach
fi

তারপরে LC_tmux_session= ssh example.comবা সাথে লগ ইন করুন LC_tmux_session=session_name ssh example.com

এই উত্তরে ssh এর মাধ্যমে পরিবেশের ভেরিয়েবলগুলি পাস করার বিষয়ে আরও তথ্য রয়েছে।


আমি যে কারণে ব্যবহার করছি না ssh example.com -t 'tmux attach'তা নয় কারণ এটিতে আমার পরিবেশটি লোড করার ক্ষেত্রে সমস্যা রয়েছে তবে ইউটিএফ -8 চরিত্র প্রদর্শন নিয়ে আমার সমস্যা হয়েছে; প্রচলিত পদ্ধতিতে সংযোগ করার সময় এই সমস্যাটির অস্তিত্ব নেই। এই কারণেই এই প্রশ্নটি এসএসএইচের সাথে সংযুক্ত হওয়ার সাথে সাথে স্ক্রিপ্টগুলি চালনার বিষয়ে।
connrs

আমি যদিও আপনার সমাধান ভালবাসি। মার্জিত
connrs

@ কনার্স: আপনি চালানোর সময়ও কি আপনার ইউটিএফ -8 নিয়ে সমস্যা আছে .profile? আমি ধরে নিয়েছি সমস্যাটি সঠিকভাবে টার্গেট মেশিনে লোকাল সেট করার কারণে হয়েছিল যা আপনার /etc/profileবা .profileঠিক করা হয়েছে। স্থানীয় সমস্যা সম্ভবত আরও তথ্যের সাথে সমাধানযোগ্য।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

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

6

আমি আগে এলি হেডি নীচের মন্তব্যে আরও ভাল পরামর্শ সহ চিপ না করা পর্যন্ত PermitUserEnvironment yesআপনার ~/.ssh/environmentআগে পরিবেশের পরিবর্তনশীল স্থাপন এবং যুক্ত করার পরামর্শ দিয়েছি ।

আপনার .zlogin(বাশ: .bash_profileইত্যাদি) খুলুন এবং নিম্নলিখিতগুলি রাখুন:

if [[ "$SSH_CONNECTION" != "" && "$MY_SSH_CONNECTION" != "yes" ]]; then
    while true; do
        echo -n "Do you want to attach to a tmux session? [y/n]"
        read yn
        case $yn in
            [Yy]* ) MY_SSH_CONNECTION="yes" tmux attach; break;;
            [Nn]* ) break;;
            * ) echo "Please answer y/n";;
        esac
    done
fi

অনুপ্রেরণা নেওয়া থেকে নেওয়া: লিনাক্স শেল স্ক্রিপ্টে ইনপুট দেওয়ার জন্য কীভাবে অনুরোধ করব?

নোট করুন যে আমি .zloginফাইলটি ব্যবহার করেছি তবে আপনি নিজের .zshrcফাইলটি ব্যবহার করতে পারেন তবে আমি আমার ডটফাইल्सগুলিকে পরিষ্কার রাখতে চাই এবং এটি আলাদা করে দেয় যাতে আমি অন্যান্য মেশিনে এটি ব্যবহার করতে পারি।

নিজের জন্য উপযুক্ত কিছু দিয়ে প্রশ্নটি প্রতিস্থাপন করুন এবং MY_SSH_CONNECTION="yes" tmux attachআপনি যে মুহুর্তে দৌড়াতে চান তা দিয়ে প্রতিস্থাপন করুন ।

এটি স্ক্রিপ্টটি কীভাবে এটি টিএমউক্সে পাস করার MY_SSH_CONNECTION="yes"আগে সেট করে তা নোট করুন tmux attachকেননা এটি একটি শেলও খোলা হবে যা উপরের একই স্ক্রিপ্টটি অ্যাক্সেস করবে এবং কোনও পুনরাবৃত্তি রোধ করবে।


2
সম্ভাব্য সুরক্ষা জড়িত কারণে কিছু পরিবেশে পারমিট ব্যবহারকারীর পরিবেশ ব্যবহার সম্ভব হবে না। এসএসএইচ। এসএসএইচ_সিএনএনএইচশন ভেরিয়েবল সেট করে, যা আপনার z এসএসএইচ_লগিনের জায়গায় আপনার .জলগিনে ব্যবহার করা যেতে পারে, ~ / .ssh / পরিবেশ ব্যবহারের প্রয়োজনীয়তা অবলম্বন করে। এর মতো কিছু করা if [[ "$SSH_CONNECTION" != "" ]]উচিত।
এলি হেডি

3

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

if [ -z "$STY" ]; then
    reattach() { exec screen -A -D -RR ${1:+"$@"} ; }
fi
if [ -t 0 ]; then
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

এটি আমাকে স্ক্রিন সেশনটিতে পুনরায় সম্পর্ক স্থাপন বা বাতিল করতে কিছুটা সময় দেয়। এটি 'ssh সিস্টেম কমান্ড' ফর্ম্যাটগুলিতে কাজ করবে না (যা ~ /.* প্রোফাইল কল করে না)। আমি যদি গর্ভবতী হয়ে যাই তবে পুনরায় যোগাযোগ করতে একটি শেল ফাংশন সেট আপ করা হয়।


গ্রেট! পরিবর্তে বাশার্ক রেখে আমি এটি * এ পরিচালনা করতে পেরেছি এবং তারপরে প্রতিটি নতুন স্ক্রিন উইন্ডোতে।
হুগো

0

আপনি দৌড় বিবেচনা করতে পারেন

ssh remotehost -t screen -DR

এবং সেখানে আপনার টার্মিনাল সেশনটি চালান। তারপরে আপনি ( ^A^D) আলাদা করতে এবং পরে পুনরায় সংযোগ করতে পারেন (পাশাপাশি একটি পৃথক ক্লায়েন্টের কাছ থেকে)। স্ক্রিনটি সম্পূর্ণ ইন্টারেক্টিভ টার্মিনাল সেশনগুলি রাখে (allyচ্ছিকভাবে লগন শেলও একইভাবে রাখে, man screen(1) বা ^A?)


আমার প্রশ্নে উল্লিখিত হিসাবে, আমি আমার সেশনগুলি পরিচালনা করতে জিএনইউ স্ক্রিনের চেয়ে tmux ব্যবহার করছি। এবং যখন লোড করা হয় তখন -t 'tmux attach'আমার কাছে ভিএম এর সাথে সমস্যা থাকে যা সাধারণত উপস্থিত হয় না। এ কারণেই আসল প্রশ্নটি স্ক্রিন / সেশন ম্যানেজমেন্টের পরিবর্তে এসএসএইচ সংযোগে স্ক্রিপ্টগুলি চালানো সম্পর্কে। আমার প্রশ্নে পরিষ্কার না থাকায় দুঃক্ষিত
connrs

দুঃখিত, আপনি tmux উল্লেখ করেছেন তবে এটি আমার কাছে কিছু বোঝায় না। যদিও একটি নতুন সরঞ্জাম উল্লেখ করার জন্য ধন্যবাদ!
শেহে

0

আপনি যুক্ত করলে বিশেষত ইউটিএফ -8 ইস্যুতে কথা বলতে

SendEnv LANG

এবং স্থানীয় প্রান্তে $LANGযেমন সেট করা থাকে en_US.UTF-8এবং আপনার এসএসডি দূরবর্তী প্রান্তে SendEnvনির্দেশের অনুমতি দেয় (সাথে AcceptEnvথাকে sshd_config), অন্য প্রান্তের টিএমউক্স এটি সম্মান করে। আমার কিছুক্ষণের জন্য এই সমস্যাটি ছিল এবং সমস্যা সমাধান করা খুব কঠিন ছিল।


0

আপনি যখন যাচ্ছেন প্রতিবার এটি চালানোর জন্য আপনি চাইলে দূরবর্তী মেশিনে কেবল tmux attachআপনার নীচে যুক্ত করতে পারেন ~/.profile

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