Ekran ve SSH nasıl etkili bir şekilde kullanılır?


12

SSH'yi ve ekranı, bir girişin her zaman bir ekran oturumuna yeniden bağlanacağı şekilde yapılandırmak istiyorum. İdeal olarak, Cd tuşuna bastığımda bu oturum sonlandırılmazdı. Bu nasıl başarılabilir? SSH hayatımı kolaylaştırmak için başka hangi yararlı ayarlar var?

Yanıtlar:


9

Sadece tüm sunucularım için aşağıdakileri yaptım, böylece SSH ile bağlandığımda otomatik olarak bir Screen oturumuna gireceğim.

Kullanıcı hesaplarınız için ~ / .bashrc öğesine aşağıdakileri ekleyin:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ] 
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  screen -RR -S main || echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

Bu, yoksa main adlı bir ekran oturumu başlatır veya varsa yeniden bağlanır. Bu, çeşitli servisler için ayrılmış ve bunlara bağlanmak istemediğim birkaç ekran oturumum olduğu için yapıldı.


CTRL-d tuş kombinasyonunun ekranda çalışan bir ekran oturumundan ayrılmak için standart olduğunu eklemek istedim.
Kaos Daemon

8

Uzak sunucularımdaki .bash_profile dosyamda aşağıdakiler var:

if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
    reattach() {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

Bu iki şey yapar: ilk olarak, kabuğu değiştirmek ve ssh-agent bağlantısını ilerletmek için bir kabuk işlevi ayarlar, ikinci olarak birkaç saniye duraklattıktan sonra işlevi çağırır (ekranın başlamasını istemiyorsanız).

ifZaten çalıştırmayan ekran ( -z "${STY}") bir terminale ( -t 0) bağlıysa ve sudo çalıştırmıyorsam (bazen değişmez $USER) ilk fıkra doğru olacaktır .

reattachSSH aktif bir SSH madde portu (ile belirtilmiş işlevi ilk kontrol edecektir -n "${SSH_AUTH_SOCK}"). Ardından, o ~/.ssh/agent-scriptan etkin olan soket dosyasıyla değiştirilir ve ortam değişkeni ( $SSH_AUTH_SOCK) yeni değerle değiştirilir. Ardından komut dosyası geçerli kabuğu tek bir screenoturumla değiştirir (yalnızca birinin var olduğundan emin olun). reattachİşlevin bağımsız değişkenleri ( ${1:+"$@"}) komutuna iletilir .

Son bölüm ilk önce tüm ölü oturumları ( screen -wipe) kaldırır , kullanıcıya ekranın kısa bir süre içinde başlayacağını ve bunun yerine Ctrl- tuşuna basarak kabuğa dönebileceğini bildirir C. Sonra 5 saniye bekler ve reattachişlevi çağırır .


4

İlk olarak, byobu kullanırsanız, byobu'yu her zaman otomatik olarak başlatmak için yeni bir kabuk oturumu yapılandırabilirsiniz (bu, yeni sürümlerin arka uç olarak tmux'u kullanmasına rağmen, aslında güzel bir ekran yapılandırmasıdır). Gerçekten düzenleyerek elle bağlamak için sonra muhtemelen ayarlayabilirsiniz ekranı byobu istemiyorsanız .profileveya başka bir kabuk yapılandırma komut dosyası exec screeneğer TERM != "screen".

Bunu beğenmezseniz, authorized_keysdosyayı belirli bir anahtarla bağlantılarda belirli bir komutu çalıştırmak için kullanabilirsiniz (ve istediğiniz kadar anahtarınız olabilir). Ayrıntılar man sshdiçin bakınız. Komutun ekranın çalışıp çalışmadığını ve bağlandığını kontrol eden bir komut dosyası çalıştırmanızı veya başka bir oturum başlatmanızı öneririm.

Ctrl-D'de bağlantıyı kesmeye gelince, ekran, anahtar eşlemelerinizi ayarlamanıza izin verir .screenrc. Ayrıntılar man screeniçin bakınız. "Bindkey" i arıyorsunuz.


2

Sorunuzla tamamen alakasız olabilir, ancak TMUX kullanmayı hiç düşündünüz mü? Kutunun dışında aradığınız birçok işlevsellik yapar.

Örneğin. TMUX altındayken bir SSH oturumunun bağlantısını keserseniz, tek yapmanız gereken ssh'ı geri almak ve oturumunuza eklemek için "tmux a" komutunu çalıştırmaktır. TMUX kullanmaya başladığımdan beri, nohup / disown komutlarının ne olduğunu unuttum ... bir şey çalıştırmanız ve oturumu kapatmanız gerekiyorsa - tmux ve detach içinde çalıştırın. Komut çıktısı arabelleğe alınır, böylece daha sonra inceleyebilirsiniz.

otomatik olarak eklemek için aşağıdaki gibi bir şey ekleyebilirsiniz .bashrc:

[ -z $TMUX ] && tmux list-sessions 2>/dev/null && tmux a

hatta daha kolay

tmux a 2>/dev/null

Daha düşük bellek alanı ve genel IMHO çok daha iyi / daha kolay kullanım seçeneğine sahiptir.

Meta-d kısayolu, TMUX'ta ayırmak için varsayılan eşlemedir.


0

screen -dAr default || screen -AS defaultbenim için çalışıyor. Bunu ~ / .bashrc'ime ekliyorum .

Anahtarları kısaca açıklamak:

  • d - Hala bağlıysa ekranı başka bir oturumdan çıkarın.
  • A - Ekrandaki pencereleri yeni terminal boyutuna uyarlayın.
  • r default - Varsayılan adlı bir ekrana ekleyin.

İlk ekran komutu (önceki komut ||) başarılı olmazsa, ikincisi çalıştırılır:

  • A - Yukarıda açıklandığı gibi ...
  • S default- Varsayılan adla yeni ekran oturumu oluşturun .

0

Ben bybubu kullanmanızı öneririm . Bu araç tmux kullanır ve güzel bir araç çubuğu ve diğer uygun pencere anahtarlama tesisleri, kısayol tuşları vb.

echo "new-session" >> ~/.byobu/.tmux.conf
echo "if [ -n '\$TMUX' ]; then :; else byobu attach; fi" >> ~/.bashrc

Başarılı bir SSH girişinden sonra bu yukarıdaki komutlar ile sistem deneyin ve mevcut bir byobu-tmux oturumuna iliştirin, değilse yeni bir oturum oluşturur.

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.