Ssh'i çağırırken $ TERM'in değerini değiştirmek mümkün müdür?


21

Yerel terminalimde TERM = konsole-256color var, ancak bu tanımlamaya sahip olduğum tüm uzak makinelerde değil.

Uzak makinedeki TERM değişikliğini ssh değiştirmek mümkün mü? Uzak makinedeki .bash * komut dosyalarını değiştirmeden, yalnızca yerel masaüstümdeki yapılandırmayı değiştirerek mi?

Yanıtlar:


9

Aşağıdaki takma adı .bashrc dosyama ekledim. OG'nin cevabını kullanır ancak takma adıyla tamamlar. ÇALIŞIYOR bir cazibe gibi ;)

# Force xterm-color on ssh sessions
alias ssh='TERM=xterm-color ssh'

Bu, bir terminalden ssh kullanıyorsam çalışır. Ama aynı zamanda ssh komutunu çalıştıran birçok senaryom var ve takma ad onlar için genişlemiyor. Her biri için ayrı bir takma ad kullanmaktan kaçınmamın bir yolu var mı?
Thayne

Komut dosyanızın belirli bir TERM değeri gerektiriyorsa, komut dosyasında sadece bu değişkenliği belirlemenin en iyisi olacağını düşünüyorum. Yoksa bu bir seçenek değil mi?
Johan

Bu gerçekten bir seçenek değil. Ayrıca, bu komut dosyaları bazı parametrelere dayanarak bir sunucu seçer ve bu sunucuya bir ssh oturumu açar (veya muhtemelen tmux oturumundaki sunucular), komut dosyalarının kendileri TERM değerine bağlı değildir.
Thayne

Bu durumda, bash profilinizi veya betiğe ayrı bir takma ad komut dosyasını dahil edebilirsiniz: shopt -s expand_aliases; ~ / .bash_aliases kaynağı
Johan

7
TERM=vt100 ssh some.host.name

Uzaktan kumandada echo $ TERM komutunu çalıştırın .


Düşündüm de, ama sadece ssh yaptığım bir ana bilgisayar alt kümesi için ayarlamak istiyorum, bu nedenle TERM = ... ssh vermek her zaman işe yaramayacak. ve hangi ana bilgisayarların eski terim bilgisine sahip olduğunu hatırlamak ve ardından anında komutu değiştirmek de hoş değildir.

Ana bilgisayar başına yapılandırma yalnızca / etc / ssh / ssh_config dosyasında desteklenir, ancak ana bilgisayar başına terminal şeması eşlemesini destekleyecek bir yapılandırma değeri bilmiyorum.
OG

Bildiğim ~ / .ssh / config içinde de yapılabilir, ancak uzak sunucuya gönderilen ortamı değiştirme seçeneği de bulamıyorum. Bir şeyi özlediğimi umuyordum.

7

ssh erkek:

     ssh reads ~/.ssh/environment, and adds lines of the format
     “VARNAME=value” to the environment if the file exists and users are
     allowed to change their environment.  For more information, see the
     PermitUserEnvironment option in sshd_config(5).

Düzenle:

Rats, yerel tarafta olabileceğini ummuştum, yine de, eğer bir istek varsa, bir yolu var. adam ssh_conf:

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.

Sshd'nin alıcı ucundaki konfigürasyonuna bağlı olarak, bu "uzak dosya değişikliği yok" şartını yerine getirebilir veya karşılamayabilir.


1
Evet, ama bu uzak taraftaki yapılandırma ve sadece yerel uçta değişen bir şeye ihtiyacım var / istiyorum.

4
SendEnv ilgili değil. Bu olabilir belki ek env değişkenler göndermek, ancak: 1. bunları değiştiremez ve 2. DÖNEM o SendEnv yer almayan olsa bile, yine de gönderilir.

5

İşte birlikte attığım hızlı ve kirli çözümüm. Daha iyi bir şey tercih ederdim. Sanırım bunun yerine bir kabuk betiği kullanabilirim. TERMDeğerlerin ayarlanması okuyucuya bir egzersiz olarak bırakılmıştır.

# To move into a separate plugin...
function ssh {
   if [[ "${TERM}" = screen* || konsole* ]]; then
     env TERM=screen ssh "$@"
   else
     ssh "$@"
   fi
}

İdeal olarak, diğer bağlantılardeki TERM'leri kontrol etmek gibi bir şey yapar, ControlPersistbirden fazla bağlantı için uzun gecikmeleri önlemek için malzemeleri kullanır .


Teşekkürler! Bunun gibi bir şey yaptım, ancak / construct $TERMile ilgili belirli değerleri kontrol etmek yerine, yerel terimimdeki sorunlu "tmux" u evrensel olarak kabul edilen "ekran" türüyle ( burada kaynak ) koşulsuz olarak değiştirmek için kullanıyorum . ifelse$(echo -n "$TERM" | sed -e s/tmux/screen/)
Aralık'ta
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.