Uzak bir sunucuda ssh komutunu kullanarak bir ekran oturumunu masaüstümden nasıl başlatabilirim?


57

Uzak sunuculardaki ekran oturumlarını masaüstümdeki tek bir ssh komutundan başlatabilmek istiyorum. Ancak, ekran ssh ile bir komut çalıştırırken kullanılamayan bir terminale ihtiyaç duyuyor gibi görünmektedir.

Yani bariz

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

(örnek olarak) çalışmıyor ve verir

Must be connected to a terminal.

Komutu bir ekranın altında başlatmak istiyorum, böylece daha sonra oturum açabilir ve manuel olarak başlattığım bir ekran oturumuna yaptığım gibi ekleyebilirim.


Bir kenara, ekranın kötü kullanımı ile değil bu hatayı vurabilir. Bir dosyadan okumak için exec <foo yapan bir kabuk işlevi vardı. Çok sonradan büyük bir senaryoda ekranı başlatmaya çalıştım. Aşağıdaki tüm yöntemler Gerçek suçlu cellat olduğu için başarısız oldu. Akılda tutulması gereken bir kişi. Yanlışlıkla kendi stdin'inizi öldürmediğinizi kontrol edin.
Neil McGill

Yanıtlar:


77

-Sh seçeneğini ssh ile kullanmayı deneyin

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

Ssh den adam

-t Force sözde tty tahsisi. Bu arbi- leri yürütmek için kullanılabilir.
        uzaktaki bir makinede izleme ekranı tabanlı programlar
        Örneğin menü servislerini uygularken çok kullanışlıdır. Çoklu-t
        ssh'nin yerel tty'si olmasa da, seçenekler tty paylaşımını zorlar.

Aynı tmux ile deniyorum ve ssh -t user@machine tmux attachuzak bir tmux oturumu ekleyebilirim ama karakter kodlaması ile karıştırır. Sadece ascii karakterleri görüntüler. Bunun için bir düzeltme var mı?
Macario

1
@ Macario bunun için ayrı bir soru açmak isteyebilirsiniz, ssh-t ile çalışırken teğet olarak ilişkiliyken, etkileşimli ve etkileşimli olmayan bir şekilde çalıştırmak için LC_ * 'yı farklı şekilde ayarlamakla ilgili gibi görünür. Çalıştırmak için ssh'ye bir komut satırı ilettiğinizde, etkileşimli olmayan ortamla yürütülür. Aynı zamanda etkileşimli olmayan bir şekilde yürütülürken geçirilen TERM ortam değişkeninin olmaması da muhtemeldir, bu durumda tmux terminalinizin gerçekte ne gibi yeteneklere sahip olduğu hakkında hiçbir fikriniz olmaz ve en az ortak paydaya düşer.
Kjetil Joergensen

Ssh kullanmıyorum ancak aynı sorunla karşı karşıyayım. Lütfen yardım et. serverfault.com/questions/861632/unable-to-run-code-in-screen
zhangjinzhou 11:17

32

Kullanabilirsiniz:

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

Bu, üzerinde çalışan bir komutla ayrılmış bir ekranı başlatır.

   -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
Cevabınız eşit derecede iyiydi, seçmem gereken çok kötü. Belki birileri ilk cevabı düzenlemeli ve bilgilerinizi eklemelidir.
Thomas Vander Stichele

8

Geç cevap, ama yaptığım şey bu, bunu yapan bir takma ad yapıyorum (haydi t diyelim):

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

Bu, ssharacı ve X11 iletmeyi devre dışı bırakmayı ve screençalışan bir oturuma eklemeyi, gerekirse yeni bir tane başlatmayı ^Z, koparma komutu olarak kullanmayı, UTF-8 kullanmasını ve terminal hakkında akıllı davranmasını söyler .

Bütün bunlar bir terminal açabileceğim, yazabileceğim tve ekran oturumumu $ MYSERVER ile açacağım anlamına geliyor. Daha sonra başka bir terminal açabilirim, aynı şeyi yaparım ve aynı oturuma başka bir pencere açarım.

Aynı ekran oturumunda birden fazla terminal penceresi olması gerçekten güzel, bu yüzden aynı anda iki ekran sekmesine bakabiliyorsunuz.


1
Aradığımı cevaplamayan bir kaç sayfa okudum, ama sen çiviledin. Ekran veya tmux'un muhtemelen bugünlerde çoğu sunucuda olduğunu ve bağlantı kurduğum kişilerin geçici olarak bulunduğunu varsayıyorum, bu nedenle çoğu cevabın önerdiği gibi bashrc ile uğraşmak istemedim. Bunu ayrıca kabuğunuzda bir işlev yapabilir ve $ host ve $ command (sonunda koyacağınız gibi) gibi argümanları kabul edebilirsiniz. Ayrıca, takma adınızı ttek bir ana bilgisayar olarak kodlamak yerine, onu ssh_config dosyasındaki ana bilgisayar adları ile birleştirebilirsiniz.
dragon788

@ dragon788 gerçekten, şimdi bir fonksiyon yaptım ve $ MYSERVER yerine "$ @" yazdım. Bunu hala çok kullanıyorum.
w00t

4

Sunucumdaki ~ / .bashrc dosyasına aşağıdakini koyarak, sunucuya ilk giriş yaptığımda veya zaten çalışıyorsa, beni o oturuma yeniden bağlar.

Bunu çok kullanışlı buluyorum:

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

Bunu denedim, ancak yaptığım screen -lszaman herhangi bir ekran oturumu göremiyorum
Tarun
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.