ssh_config içinde ayarlanan SendEnv değişkenlerini ~ / .ssh / config içinden nasıl devre dışı bırakabilirsiniz


30

Bunu hiçbir yerde bulamadım, bu yüzden böyle bir soruna vuran tek kişi ben olduğumu merak ediyorum.

Red Hat ve Debian'daki ssh varsayılan olarak uzak oturumda LC * ve LANG değişkenlerini geçen SendEnv seçeneğine sahip bir ssh_config'e sahiptir. Eğer biri / etc / ssh / ssh_config dosyasını değiştirecek bir kök değilse, bu davranışı nasıl devre dışı bırakabilir? SendEnv seçeneği birikmiş gibi görünüyor ve sıfırlamak için herhangi bir yol göremiyorum.

Sorulmaması için, yerel ayarların makine için varsayılan olması nedeniyle komut dosyalarında ve programlarda yan etkilerden kaçınmak için makineleri test etmek için geçmem gerekir.


Bu, sorunuza bir cevap değil, ancak test makinelerinizdeki komut dosyalarını ve programları envbir sarmalayıcı komut dosyasıyla ya da komut dosyası kullanarak çağırarak sorununuzu çözebilir misiniz ?
Scott

2
evet, geçici çözümler mümkündür ancak uygunsuz
akostadinov

Yanıtlar:


18

Tek sen değilsin . ssh_config(5)Sizde belgelendiği gibi ayarlayamazsınız SendEnvçünkü

Çoklu ortam değişkenleri [...] çoklu SendEnv yönergelerine yayılmış olabilir.

Test makinelerinde root kullanıyorsanız AcceptEnv, istemci tarafından gönderilen değişkenleri kabul etmemek için değişiklik yapabilirsiniz .


4
Kahretsin, sadece -F komut satırında yardımcı olabilir ama gerçekten kullanması çok zor. Bkz bugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov

5

Bu yapılamaz ~/.ssh/configçünkü SendEnvgeçersiz kılınamaz.

Diğer ad kullanmak, ssh adındaki komut dosyalarında çalışmaz.

Bir alternatif, bir işlevi dışa aktarmaktır. Örneğin ~/.bashrc:

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh

1

Bir seçenek var SetEnv, biri LANGgöndermeden önce belirli bir değere zorlayabilir .

Ayrıca man sayfa diyor ki

Önceden ayarlanmış SendEnv değişken adlarını, kalıpları önekleyerek silmek mümkündür -.

ama bu işi yapmayı başaramadım.


Bugzilla.mindrot.org/show_bug.cgi?id=1285 , muhtemelen -yaklaşımın neden işe yaramadığını açıklayan bakın . Uzak LANG ve ssh config içindeki diğer değişkenleri zorlamak için iyi bir öneri. İşleri daha öngörülebilir yapar. Belki SetEnvde daha yeni bir yönergedir çünkü başka kimse önermedi. SetEnv LANG=en_US.UTF-8
akostadinov

0

Bash kullanıyorsanız, diğer sunuculara LANG'ı devre dışı bırakmak için bir takma ad ssh = 'LANG = komut ssh' ayarlayabilirsiniz.


0

su - youruserSsh üzerinden giriş yaptığınız zaman kullanabilirsiniz . Bu kullanıcı için ortamı yeniden başlatır.

Aslında yeni bir oturumu yeni bir ortamla başlatıyorsunuz.


Soru, çevrenin otomatik olarak aklı başında gelmesidir. Ve btw su her zaman yüklü değildir. Ve şifrenizi su ile yazmanız gerekir. Yararlı değil. Daha kolay geçici çözümler var.
akostadinov

0

Göre man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

Yani, ssh olabilir uymadan/etc/ssh/ssh_config açıkça komut satırında (varsayılan) konfigürasyon dosyasını belirterek ( ~/.ssh/configboş olması sorun yok):

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

Bunun için bir takma ad yapabilirsiniz ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

Bash kabuğunu yeniden başlatın, sonra basitçe bu şekilde ssh yapabilirsiniz:

$ ssh your_user@your_host

Yukarıdaki yorumuma bakın. if one supplies on command line -F, then the system wide config is ignored according to man pagedan bugzilla.mindrot.org/show_bug.cgi?id=1285 ; bir seçenek ama gerçekten istenen özellik değil.
akostadinov
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.