SSH istemcisinin TERM ortam değişkenini sunucuya geçirmesini engelliyor musunuz?


21

Şu anda Fedora 18 gnome terminalini kullanıyorum , sonra tmuxçoklayıcıya başladım . Bir CentOS 5 sunucusuna sshkomut aracılığıyla bağlandıktan sonra şunu bulurum:

  • ls sonucun rengi yok
  • tmux, screen, hexedit, htopTüm hata mesajı gibi ile başlatılamadı:
    açık terminal başarısız: eksik veya uygun olmayan terminal: ekran-256renk

Görünüşe göre ssh$ TERM ortam değişkeni sunucuya geçer, ancak /etc/ssh/ssh_configFedora 18 dosyasında bulamıyorum .

Sunucudaki $ TERM değişkenini el ile değiştirebilmeme rağmen, her bağlandığımda tekrar oluyor. Peki nasıl önlenir?

Yanıtlar:


18

$TERM uygulamalara hangi terminalle konuştuklarını söylemektir, böylece onunla nasıl konuşacaklarını bilirler.

Uzak ana bilgisayar tarafından desteklenen ve terminalinizle olabildiğince yakın bir değere değiştirin ( screen).

Çoğu Linux sisteminin en azından bir screenterminfo girişi olmalıdır. Değilse, screenbir üst kümesini uygular vt100ve vt100evrenseldir. Yani:

TERM=screen ssh host

veya

TERM=vt100 ssh host

256 renk desteğine ihtiyacınız varsa, xterm-256colorhangisinin yeterince yakın olması gerektiğini deneyebilir ( screen256 rengi aynı şekilde destekler xterm) ve uygulamalarınıza terminal uygulamanızın 256 rengi desteklediğini söyleyebilir ve nasıl kullanacaklarını söyleyebilirsiniz.

Veya terminfo girişini uzak ana bilgisayara kurabilirsiniz.

infocmp -x | ssh -t root@remote-host '
  cat > "$TERM.info" && tic -x "$TERM.info"'

2
iyi bilmek infocmpve bir tickez derlendiğinde geçici olarak $TERMtekrar değiştirmeye gerek yok . Bu arada, sadece /usr/share/terminfo/s/screen-256colorFedora 18'den CentOS'a (rsync) kopyaladım , tamam görünüyor gibi görünüyor ( rsync -tv /usr/share/terminfo/s/screen-256color root@the_host:/usr/share/terminfo/s).
LiuYan 刘 研

bahsedilen unuttum i ran tmuxgnome-terminali Fedora'da 18 arasında, tmuxdeğişmiş $TERMdeğeri screen-256colorden xterm-256color.
LiuYan 刘 研

btw, ssh bu şekilde çalışabilir: hangi ana makinenin / sunucunun desteklendiği (içine itilmedi) terminfoyu alın, sonra istemci terminalinin destekleyebileceği bir alıcı alın?
LiuYan 刘 研

2
infocmp | ssh -t root@remote-host 'cat > "$TERM.info" && tic "$TERM.info"'kısaltılabilir infocmp | ssh root@remote-host "tic -". Bunun nedeni, bir borunuz olduğunda, - kullanılarak bir dosya olarak erişilebilmesidir ve neyse ki borular SSH'de çalışır.
Alan Jenkins

1
@starfry, tic(terminfo derleyici) oluşturulan dosyaların ikili biçiminin bir sistemden diğerine aynı olacağını veya konumlarının aynı olacağını garanti edemem . ticayrıca izinlerin doğru olduğundan emin olabilir veya gerektiğinde aracı dizinler oluşturabilir.
Stéphane Chazelas

10

Benim durumumda , yerel masaüstümde .zshrc( .bashrcbash kullanıyorsanız) bir takma ad ekledim :

alias ssh='TERM=xterm ssh'

Zaten bir takma ad kullanıyorsanız, Ortam atamasını içerecek şekilde ayarlayın.


1

Bunu .bashrcuzaktaki ana bilgisayara koydum :

# 256-color mode not supported on this host
if echo $TERM | grep -q -- '-256color'; then
    echo -e '\n\n256-color mode not supported on this host.  Reverting TERM...\n'
    export TERM=`echo -n $TERM | sed 's/-256color//'`
fi

Bu şekilde, her ikisi de xterm-256colorve screen-265colordüzgün işlenir. Ayrıca, sunucu daha sonra yükseltilir ve 256 rengi destekliyorsa, SSHing sırasında TERM değişkenimin neden değiştiğini merak ederek kafamı duvara vurmayacağım.


Veya, bir alt kabuk ve başka bir işlem başlatmayın:export TERM=${TERM%%-256color}
miken32

1

Değişmek $TERMişe yarayabilir, ancak bunu önermiyorum, bu bir çözüm yerine sadece bir çözüm.

Sistemlerimde bu sorunla karşılaştığımda, uzak sisteme en yaygın terminal türleri için destek yükleyerek düzeltirim:

  • yum install ncurses-baseiçin screen-256colorCentOS üzerinde
  • yum install ncurses-termiçin screen-256color-bceCentOS üzerinde
  • apt install ncurses-baseher ikisi için screen-256colorve screen-256color-bceDebian, Ubuntu ve Mint üzerinde

Ncurses ile ilgili paketler birçok başka terminal için de destek sağlar ve diğer tüm büyük dağıtımlarda da mevcuttur. (Ama benim kullanım durumum ve sorunuz için bu yeterli bilgi olmalı)


0

Bkz. Adam ssh_config:

 SendEnv
         Specifies what variables from the local environ(7) should be sent
         to the server.  Note that environment passing is only supported
         for protocol 2.  The server must also support it, and the server
         must be configured to accept these environment variables.  Refer
         to AcceptEnv in sshd_config(5) for how to configure the server.
         Variables are specified by name, which may contain wildcard char‐
         acters.  Multiple environment variables may be separated by
         whitespace or spread across multiple SendEnv directives. The
         default is not to send any environment variables.

ve erkek sshd_config:

 AcceptEnv
         Specifies what environment variables sent by the client will be
         copied into the session's environ(7).  See SendEnv in
         ssh_config(5) for how to configure the client.  Note that envi-
         ronment passing is only supported for protocol 2.  Variables are
         specified by name, which may contain the wildcard characters `*'
         and `?'.  Multiple environment variables may be separated by
         whitespace or spread across multiple AcceptEnv directives.  Be
         warned that some environment variables could be used to bypass
         restricted user environments.  For this reason, care should be
         taken in the use of this directive.  The default is not to accept
         any environment variables.

Buna göre, varsayılan değer herhangi bir değişken göndermek olmamalıdır, ancak TERM özel görünüyor. Yine de gönderilir.

Bu nedenle, ssh (like TERM=xterm ssh ...) çağırırken TERM'yi değiştirebilir, giriş yaptıktan sonra değiştirebilir (in gibi .bash_profile) veya sunucu tarafında bilinmeyen TERM türünü tanımlayabilirsiniz (orada root erişiminiz olduğunu varsayarak). Ayrıntılar için diğer cevaba bakınız.


1
Ayar $TERMyapmamak, desteklenmeyen bir değere ayarlamaktan daha iyi olmayacaktır.
Stéphane Chazelas

Gerçek soru, TERM göndermenin nasıl önleneceği idi. - Cevap: Yapamazsınız. - Yapması gereken uygun bir değere ayarlamak, evet.
michas

$TERMgeçici olarak değiştirmek bir çözüm olabilir, ama her seferinde yapmam gerekiyor. Bu arada, her iki CentOS 5 ve Fedora 18 Kabul görünüyor ENV tüm yerel ortam değişkenleri ( LANG, LC_*, ...)
LiuYan刘研
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.