ssh girişinde ekranı otomatik olarak başlat


19

sshUzak bir sunucuya gittiğimde bir ekranın otomatik olarak nasıl başlatılacağını okudum . Basit bir tek astarı, içeri girdiğimde .bash_profilebaşlamak için eklemek istiyorum ve ekranı ayırdığımda uzak bağlantımdan ÇIKMAMAK istiyorum.screenssh

Ben içine bakarak edilmiştir exec screenve hemen hemen her kombinasyonu -d, -r, -Dve -Rben ne gerek bayrakları çözemiyorum.

İdeal olarak ssh whateveryeni bir sunucuya yazabilir ve sunucuya screengirebilirim ya da eski bir ekranı yeniden bağlayabilirim, hangisini daha iyi gördüğümü görmek için her ikisini de nasıl yapacağımı bilmek isterim. Sonra yazabilirim Ctrl adya da Ctrl dbana ssho sunucu için normal girişe (motd'yi görebileceğiniz) geri getirmesini sağlayabilirim. Oradan screen -ristediğim ekrana geri dönebilir veya Ctrl doturumu kapatmak için tekrar vurabilirim .

Yanıtlar:


19

Basit bir screen -Rhile yapmalı.

Bunu doğrulamak için, screen -Ruzak sunucudaki .bash_profile dosyama ekledim , oturum açtım , ekrandan ayrıldım ve uzak sunucudaki normal bir kabuk komut istemine geri bırakıldım. .Bashrc ile de doğrulandı. Sonraki girişler beklenen sonucu verdi (ekran oturumuna yeniden ekleme).


Teşekkürler! Etrafta okuyordum ve exec -R ekranına ihtiyacım olduğu izlenimindeydim. Sevindim bu çalıştı
Ronald Dregan

Ekran ctrl + D ile kapatıldıktan hemen sonra bu satırdan hemen sonra ssh oturumu sonlandırılır mı logoutyoksa kötü bir fikir exitmi?
Griddo

Bu benim için işe yaramadı. Her oturum başladığında hat yürütüldüğünden birkaç düzine ekran başlattım. Bunun olmaması için nasıl yaptın?
Thomas

11

Yeni bir pencere veya ekran oturumu başlatırken bazı çözümlerle oluşturulan 40 basamaklı ekran oturumuyla ilgili sorunlar yaşadım. Basamaklı ekranı ortadan kaldırabilir ve bununla bir tane yoksa yeni bir oturum oluşturabilirim:

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

Bir ekran oturumunda olup olmadığınızı test eder ve screen -Rdeğilseniz çalışır . Test olmadan "Ekranın içinden mi ekliyorsunuz?" Her yeni ekran penceresi oluşturduğunuzda ekrandan uyarı.


+1 - screen -lsTony'nin bahsettiği testten daha iyi
cwd

10

screen -RR kullanılabilir ilk oturuma yeniden bağlanır veya gerekirse bir oturum oluşturur.


ekran -R'yi kullanmak birden fazla oturumda sorun yarattığım için gerçekten yararlı oldu.
David

Bu harika, teşekkürler! Bulunan ilk "Müstakil" oturuma bağlanır (varsa) ve ekli oturumları yoksayar. Böylece giriş yapmanıza ve birden fazla pencerenin açık olmasına izin verir, ancak yine de her oturumun bir ekranda çalışmanın korumasına sahip olduğundan emin olun. OPS çalışanlarımız size teşekkür ediyor!
Ian McGowan

8

İhtiyacınızı anlarsam, denemelisiniz:

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

Yalnızca bir ekran oturumu oluşturacak, aksi takdirde mevcut olana çok pencereli bir şekilde yeniden bağlanacaktır (birden fazla ssh oturumunuz olsa bile, aynı ekran oturumuna gireceksiniz)


Bu fikri, çok pencereli SSH istemcileri (veya bazen doğrudan makinede oturum açarak) olduğumuzu kabul etmesi için seviyorum. Bitvise gibi bir şey kullanıyorsanız ve birden çok terminal penceresi açıksa oldukça esnektir - ekran pencerelerini ayrı fiziksel pencerelere dönüştürebilirsiniz.
Piku

1
Tüm bunlar, "eklenecek bir screen -xRşey varsa ekle, yeni ekran yap" olarak ayrıştırılmış gibi görünebilir .
Piskvor binadan ayrıldı

0

İşte küçük bir uzantı,

bashrc komut dosyası için birden fazla bağımsız ekran oturumu olup olmadığını kontrol edin. Daha fazlası varsa, oturumu manuel olarak seçmelisiniz. Müstakil bir oturum olduğunda bu oturuma geri dönersiniz. Oturumdan çıkarsanız, ssh oturumu da kapatılır.

 #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

SSH üzerinden bağlandığınızda bir ekran oturumuna otomatik olarak bağlanmak istiyorsanız, aşağıdaki kodu uzak makinenizde .bash_profileveya .bashrcuzaktaki makinenize ekleyin:

  • SSH üzerinden her bağlandığınızda yeni bir ekran oturumu başlatın.
  • Zaten mevcut olan bağımsız ekran oturumunu her zaman en son oturumdan başlayarak yeniden kullanın . Ayrılmış oturum yoksa yeni bir oturum başlatır.
  • Makinenize birden fazla SSH bağlantısı açtığınızda, yalnızca ayrılmış olanları yeniden kullandığımız için farklı bir ekran oturumu alırsınız.
  • Komut dosyasını bilgisayarınıza eklerseniz döngülerden kaçının. .bashrc

İşte senaryo:

#!/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

Not: Bunu yerel terminal için etkinleştirmek istiyorsanız && ! -z "${SSH_CLIENT}, ilk satırdan kaldırın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.