ssh লগইন করার পরে স্বয়ংক্রিয়ভাবে পর্দা শুরু করুন


15

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

আমি মধ্যে খুঁজছেন হয়েছে exec screenএবং প্রায় কাছাকাছি প্রতিটি সমন্বয় -d, -r, -Dএবং -Rও যা পতাকার আমি প্রয়োজন জিনিসটা করতে পারবে না।

আদর্শভাবে আমি ssh whateverসার্ভারে একটি নতুন টাইপ করে লগইন করব screenবা এটি কোনও পুরানো স্ক্রিনটি পুনরায় সংযুক্ত করতে পারে, আমি কীভাবে উভয়কে কীভাবে করতে হয় তা ভাল করে দেখতে ভাল লাগতে চাই। তারপরে আমি হয় টাইপ করতে পারি Ctrl adবা Ctrl dএটিকে sshসেই সার্ভারের জন্য সাধারণ লগিনে ফিরিয়ে আনতে (যেখানে আপনি মোড দেখতে পাবেন)। সেখান থেকে আমি screen -rযা খুশি স্ক্রিনে ফিরে আসতে পারি বা Ctrl dলগ আউট করতে আবার আঘাত করতে পারি।

উত্তর:


18

একটি সহজ screen -Rকৌশল করা উচিত।

এটি যাচাই করার জন্য, আমি screen -Rআমার .Bash_profile কে একটি রিমোট সার্ভারে যুক্ত করেছি, লগ ইন করেছি, স্ক্রীন থেকে বিচ্ছিন্ন হয়েছি এবং রিমোট সার্ভারের একটি সাধারণ শেল প্রম্পটে ফিরে এসেছি। .Bashrc এর সাথেও যাচাই করা হয়েছে। পরবর্তী লগিনগুলি প্রত্যাশিত ফলাফল পেয়েছে (স্ক্রিন সেশনে পুনরায় সংযুক্ত)।


ধন্যবাদ! আমি আশেপাশে পড়ছিলাম এবং আমি এমন ছাপে ছিলাম যে আমার এক্সিকিউট স্ক্রিন-আর দরকার হবে। এটি কাজ করে খুশি
রোনাল্ড ড্র্যাগান

এটি একটি খারাপ ধারণা করা হয় logoutবা exitঅধিকার যে লাইন St কোনো SSH অধিবেশন পরে অবিলম্বে একবার পর্দা Ctrl + D দ্বারা বন্ধ করা হয় সমাপ্ত করা হয়?
গ্রিডো

এটি আমার পক্ষে কার্যকর হয়নি। প্রতিবার সেশন শুরু হওয়ার পরে লাইনটি কার্যকর হওয়ার পরে আমি কয়েক ডজন স্ক্রিন শুরু করেছি। আপনি এটি কীভাবে করলেন যাতে এটি না ঘটে?
টমাস

10

একটি নতুন উইন্ডো বা স্ক্রিন সেশন শুরু করার সাথে সাথে কয়েকটি সমাধানের সাথে 40 ক্যাসকেডিং স্ক্রিন সেশন তৈরি হওয়ার বিষয়ে আমার সমস্যা ছিল। আমি ক্যাসকেডিং স্ক্রিনটি মুছে ফেলতে এবং এটির সাথে উপস্থিত না থাকলে একটি নতুন অধিবেশন তৈরি করতে সক্ষম হয়েছি:

if [ -z "$STY" ]; then screen -R; fi

আপনি কোনও স্ক্রিন সেশনে রয়েছেন কিনা তা পরীক্ষা করে এবং screen -Rআপনি না থাকলে চলবে । পরীক্ষা ছাড়াই আপনি "পর্দার ভিতরে থেকে সংযুক্তি" পাবেন? প্রতিবার আপনি একটি নতুন স্ক্রিন উইন্ডো তৈরি করার সময় পর্দা থেকে সতর্কতা।


+1 - screen -lsটনি উল্লিখিত পরীক্ষার চেয়ে ভাল এটি পছন্দ করেছেন
সিডব্লুডি

8

আমি যদি আপনার প্রয়োজন বুঝতে পারি তবে আপনার চেষ্টা করা উচিত:

if $(screen -ls | grep -q pts); then screen -x; else screen -R; fi

এটি কেবলমাত্র একটি স্ক্রিন সেশন তৈরি করবে, অন্যথায় এটি বহু-উইন্ডো ফ্যাশনে বিদ্যমান একের সাথে পুনরায় সংযোগ স্থাপন করবে (আপনার একাধিক এসএস সেশন থাকলেও আপনি একই পর্দার সেশন পর্যন্ত শেষ করবেন)


আমি এই স্বীকৃতিটির জন্য এই ধারণাটি পছন্দ করি যে আমাদের মাল্টি-উইন্ডো এসএসএইচ ক্লায়েন্ট রয়েছে (বা কখনও কখনও সরাসরি গিয়ে মেশিনে সরাসরি লগ ইন করুন)। আপনি যদি বিটভিসের মতো কিছু ব্যবহার করেন এবং একাধিক টার্মিনাল উইন্ডো খোলা থাকে - তবে এটি পৃথক শারীরিক উইন্ডোতে স্বতন্ত্র স্ক্রিন উইন্ডোগুলিকে রূপান্তর করতে পারেন যদি এটি বেশ নমনীয়।
পিকু

1
এই সমস্তটি এর সাথে প্রতিস্থাপন করা যেতে পারে screen -xR, যা "সংযুক্ত করার মতো কিছু আছে তবে সংযুক্ত করুন, অন্যথায় নতুন স্ক্রিন তৈরি করুন" হিসাবে বিশ্লেষণ করা বলে মনে হচ্ছে।
পিসকভোর

7

screen -RR প্রথম উপলব্ধ অধিবেশনটিতে পুনরায় যুক্ত হবে বা প্রয়োজনে একটি তৈরি করবে।


এটি সত্যিই দরকারী কারণ স্ক্রিন -আর ব্যবহার একাধিক সেশনে আমাকে ঝামেলা সৃষ্টি করছিল।
ডেভিড ভি।

এটি দুর্দান্ত, ধন্যবাদ! এটি পাওয়া প্রথম "বিচ্ছিন্ন" সেশনের সাথে সংযোগ স্থাপন করে (যদি থাকে তবে) এবং সংযুক্ত সেশনগুলি উপেক্ষা করে। সুতরাং এটি আপনাকে লগইন করতে এবং একাধিক উইন্ডো খোলা রাখতে দেয়, তবে এটি নিশ্চিত করে নিন যে প্রতিটি সেশনে একটি স্ক্রিনে চলার সুরক্ষা রয়েছে। আমাদের ওপিএসের লোকেরা আপনাকে ধন্যবাদ!
ইয়ান ম্যাকগওয়ান 19

0

এখানে একটু এক্সটেনশন,

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

 #Start Screen
 if [ -z "$STY" ]; then

 value=$( screen -ls |grep '\<pts.*Detached\>' |wc -l )

 if [ $value -gt 1 ]; then

  screen -ls

 else

  screen -R

  echo 5 Sek. bis die SSH Session beendet wird.

  echo Strg + C - um ohne screen weiter zu arbeiten.

  sleep 6

  exit

 fi

fi

0

আপনি যখন এসএসএইচের মাধ্যমে সংযোগ করার সময় আপনি যদি কোনও স্ক্রিন সেশনে স্বয়ংক্রিয়ভাবে সংযোগ স্থাপন করতে চান তবে নীচের কোডটি আপনার .bash_profileবা .bashrcআপনার দূরবর্তী মেশিনে যুক্ত করুন, এটি হবে:

  • আপনি যখন এসএসএইচের মাধ্যমে সংযোগ করবেন তখনই নতুন স্ক্রিন সেশন শুরু করুন।
  • ইতিমধ্যে বিদ্যমান বিচ্ছিন্ন স্ক্রিন সেশনটি পুনরায় ব্যবহার করুন, সর্বদা সর্বশেষতমটি দিয়ে শুরু করুন। যদি কোনও বিচ্ছিন্ন সেশন উপলব্ধ না হয় তবে এটি একটি নতুন শুরু করে starts
  • আপনি যখন আপনার মেশিনে একাধিক এসএসএইচ সংযোগগুলি খুলবেন আপনি একটি আলাদা স্ক্রিন সেশন পাবেন যেহেতু আমরা কেবল বিচ্ছিন্নদের পুনরায় ব্যবহার করছি।
  • আপনি যদি স্ক্রিপ্টটি যুক্ত করে থাকেন তবে লুপগুলি এড়িয়ে চলুন .bashrc

লিপিটি এখানে:

#!/bin/bash
#
#  Attaches to the first Detached Screen. Otherwise starts a new Screen.

# Only run if we are not already inside a running screen and only if in an SSH session.
if [[ -z "${STY}" && ! -z "${SSH_CLIENT}" ]]; then
  detached_screens=($(screen -ls | grep pts | grep -v Attached))

  for screen in "${detached_screens[@]}"; do
    if [[ "${screen}" == *".pts"* ]]; then
      IFS='.pts' read -ra split <<< "${screen}"
      for id in "${split[@]}"; do
        first_id="${id}"
        break
      done 
      break
    fi
  done

  screen -R $first_id
fi

পিএস: আপনি যদি স্থানীয় টার্মিনালের জন্য এটি সক্ষম করতে চান && ! -z "${SSH_CLIENT}তবে প্রথম লাইনে সরিয়ে দিন ।

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