আমি আমার ডেস্কটপ থেকে রিমোট সার্ভারে কমান্ড ওভার কমান্ড দিয়ে কীভাবে স্ক্রিন সেশন শুরু করতে পারি?


57

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

তাই সুস্পষ্ট

ssh root@my.machine screen "tail -f /var/log/messages"

(উদাহরণ হিসাবে) কাজ করে না এবং দেয়

Must be connected to a terminal.

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


অন্যদিকে, আপনি স্ক্রিনের খারাপ ব্যবহারের মাধ্যমে না হয়ে এই ত্রুটিটি আঘাত করতে পারেন। আমার একটি শেল ফাংশন ছিল যা একটি ফাইল থেকে পড়তে এক্সিকিউটিভ <foo করছে। অনেক পরে একটি বড় স্ক্রিপ্টে আমি পর্দা চালু করার চেষ্টা করেছি। নীচে সমস্ত পদ্ধতি obv। আসল অপরাধী নির্বাহী হওয়ায় ব্যর্থ হয়েছিল। মনে রাখা এক। আপনি নিজের স্টিডিনটিকে অজান্তেই হত্যা করেননি তা পরীক্ষা করে দেখুন।
নীল ম্যাকগিল 21

উত্তর:


77

Ssh করতে -t বিকল্পটি ব্যবহার করে দেখুন

ssh -t root@my.machine screen "tail -f /var/log/messages"

মানুষ ssh থেকে

-সিসডো-টিটি বরাদ্দকে বল প্রয়োগ করুন। এটি আরবি কার্যকর করতে ব্যবহার করা যেতে পারে-
        একটি দূরবর্তী মেশিনে স্ক্রিন-ভিত্তিক প্রোগ্রামগুলি ট্রাই করুন, যা হতে পারে
        খুব দরকারী, উদাহরণস্বরূপ, মেনু পরিষেবাগুলি প্রয়োগ করার সময়। একাধিক -t
        বিকল্পগুলি tty বরাদ্দকে বাধ্য করে, যদিও ssh এর কোনও স্থানীয় tty নেই।

আমি tmux এর সাথেও একই চেষ্টা করছি ssh -t user@machine tmux attachএবং আমি একটি রিমোট tmux সেশনটি সংযুক্ত করতে পারি তবে এটি অক্ষর এনকোডিংয়ের সাথে মিশে যায়। এটি কেবল আসকি চরগুলি প্রদর্শন করে। এটা কি ঠিক করা যাবে?
ম্যাকারিও

1
@ ম্যাকারিও আপনি এটির জন্য একটি পৃথক প্রশ্ন খুলতে চাইতে পারেন, যদিও এটি স্পর্শকাতরভাবে সম্পর্কিত কারণ আপনি এটি ssh -t দিয়ে চালাচ্ছেন, এটি এলসি_ * সেট করার সাথে সম্পর্কিত বলে মনে হচ্ছে এটি ইন্টারেক্টিভভাবে বনাম অ-ইন্টারেক্টিভভাবে চালানোর জন্য আলাদাভাবে রয়েছে। যখন আপনি চালনার জন্য ssh- এ কোনও কমান্ড-লাইনটি পাস করেন, এটি অ-ইন্টারেক্টিভ পরিবেশের সাথে কার্যকর করা হবে। অ ইন্টারেক্টিভ পদ্ধতিতে কার্যকর করার সময় এটি TERM এনভায়রনমেন্ট ভেরিয়েবলের অভাব হতে পারে এটিও সম্ভব যে ক্ষেত্রে আপনার টার্মিনালটির আসলে কী ক্ষমতা রয়েছে tmux এর কোনও ধারণা নেই এবং এটি সর্বনিম্ন সাধারণ ডিনোমিনেটরে ফিরে যায়।
কেজেটিল জোর্জেনসেন

আমি ssh ব্যবহার করছি না তবে একই সমস্যার মুখোমুখি। সাহায্য করুন. সার্ভারফলট.কোশনস
অযোগ্য /

32

তুমি ব্যবহার করতে পার:

ssh root@host screen -m -d "tail -f /var/log/messages"

এটি একটি বিচ্ছিন্ন পর্দা শুরু করে তাতে একটি কমান্ড চলমান থাকে।

   -m   causes screen  to  ignore  the  $STY  environment  variable.  With
        "screen  -m"  creation  of  a  new session is enforced, regardless
        whether screen is called from within  another  screen  session  or
        not.  This  flag has a special meaning in connection with the `-d'
        option:

   -d -m   Start screen in "detached" mode. This creates a new session but
           doesn't  attach  to  it.  This  is  useful  for  system startup
           scripts.

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

8

দেরীতে উত্তর, তবে আমি এটিই করি, আমি একটি উপকরণ তৈরি করি (আসুন একে টি বলি) এটি করে:

ssh $MYSERVER -a -x -t screen -xRR -A -e^Zz -U -O

এটি sshএজেন্ট এবং এক্স 11 ফরোয়ার্ডিংকে অক্ষম করতে এবং screenচলমান সেশনে সংযুক্ত করতে, প্রয়োজনে একটি নতুন শুরু করতে, ^Zব্রেকআউট কমান্ড হিসাবে ব্যবহার করতে, ইউটিএফ -8 ব্যবহার করতে এবং টার্মিনাল সম্পর্কে স্মার্ট হতে বলে।

এর অর্থ হ'ল আমি একটি টার্মিনাল tখুলতে পারি , টাইপ করব এবং এটি আমার স্ক্রিন সেশনটি $ MYSERVER এ খুলবে। তারপরে আমি অন্য টার্মিনালটি খুলতে পারি, একই জিনিসটি করতে পারি এবং একই সেশনে আমি অন্য উইন্ডোটি পাই।

একই স্ক্রিন সেশনে একাধিক টার্মিনাল উইন্ডোজ পাওয়া সত্যিই দুর্দান্ত তাই আপনি একই সাথে দুটি স্ক্রিন ট্যাব সন্ধান করতে পারেন।


1
আমি বেশ কয়েকটি পৃষ্ঠায় পড়েছিলাম যা আমি যা খুঁজছিলাম তার যথেষ্ট উত্তর দিচ্ছিল না তবে আপনি তা পেরে গেছেন। আমি ধরে নিচ্ছি যে এই মুহূর্তে স্ক্রিন বা টিএমউक्स সম্ভবত বেশিরভাগ সার্ভারে রয়েছে এবং আমি যেগুলির সাথে সংযুক্ত আছি তা সম্ভাব্য সংক্ষিপ্ত আকারের তাই বেশিরভাগ উত্তরের মত বাশার্কের সাথে আমি গোলযোগ করতে চাইনি। আপনি এটি আপনার শেলের মধ্যে একটি ফাংশনও তৈরি করতে পারেন এবং $ হোস্ট এবং $ কমান্ডের (যেমন আপনি শেষে রাখবেন) মত আর্গুমেন্ট গ্রহণ করতে পারেন। এবং আপনার এলিফটি tযা একটি একক হোস্ট হিসাবে হার্ডকোডিংয়ের পরিবর্তে আপনি এটিকে নিজের ssh_config এ হোস্টনামের সাথে একত্রিত করতে পারেন।
ড্রাগন 788

@ ড্রাগন 8৮৮ প্রকৃতপক্ষে, আমি এখনই এটি একটি ফাংশন তৈরি করেছি এবং "$ @" দিয়ে $ মাইজারভারকে প্রতিস্থাপন করেছি। আমি এখনও এই এক অনেক ব্যবহার।
w00t

4

নিম্নলিখিতটি আমার সার্ভারে putting / .bashrc ফাইলে রেখে, এটি প্রথমবার যখন আমি সার্ভারে লগইন করি বা একটি ইতিমধ্যে চালু হয়, তখন আমাকে সেই সেশনে পুনরায় সংযুক্ত করে এটি স্ক্রিন সেশন শুরু করে।

আমি এটি খুব সুবিধাজনক মনে:

if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
    export SCREEN_EXIST=1
    screen -DRi
fi

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