$ BASH_ENV genellikle nerede belirlenir?


19

Ben aynı şekilde yapılandırılması gereken ikiz Linux sunucuları var, ancak bunlardan birine ssh komutları ~ / .bashrc içinde belirtilen bir yol gerektiren komutlar için başarısız oluyor. Örneğin, pwdhem etkileşimli hem de ssh gibi bir komut kullanabilirim , ancak bir uygulama kutusu klasöründe bulunan bir programı çalıştırmayı denersem, yalnızca sunuculardan biri için etkileşimli bir kabukta çalışır.

Her iki sunucudaki / etc / profile ve / etc / çevre dosyası aynıdır, ancak $ BASH_ENV düzgün çalışan sunucuda ~ / .bashrc olarak ayarlanmıştır. Çalışmayan sunucuda $ BASH_ENV ayarlamak istiyorum, ancak çalışma sunucusunda ayarlandığı yere ayarlamayı tercih ederim. Başka bir bilgisayardan ssh komutu gibi etkileşimli olmayan bir oturum açma sırasında Linux'un çalışacağı yerler nelerdir?

edit: Kullanıcı için / etc / passwd satırında her iki sunucuda / bin / bash belirtilir. Her iki sunucu için ~ / .bash_profile dosyası aynıdır ve içerir if [ -f ~/.bashrc ]; then . ~/.bashrc; fi. Sistemler arasındaki tek fark, $ BASH_ENV'nin çalışmayan sunucuda boş bir dize olmasıdır ve çalıştığı sunucuda nerede ayarlandığını bulamıyorum.

değiştir 2: Her iki sunucudaki ~ / .ssh / ortam dosyasında BASH_ENV = ~ / .bashrc var


1
/ Etc / passwd her iki sunucuda da aynı mıdır? Bash "/ bin / bash" yerine "/ bin / sh" olarak adlandırılırsa, bashrc dosyalarını (yalnızca profil dosyaları) okumaz.
freiheit

Aynı değil, ancak komutları gönderdiğim kullanıcı / etc / passwd içinde her iki sistemde de aynı satıra sahip.
Fesleğen

Peki ~ / .profile ve ~ / .bash_profile?
freiheit

aynı ve her ikisi de içeririf [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Basil

/ Etc / bashrc ve /etc/profile.d/* 'nin aynı olduğunu doğruladınız mı? ~ / .bash_login? /etc/pam.d/*? /etc/security/pam_env.conf?
freiheit

Yanıtlar:


21

BASH_ENVyalnızca ortam veya başlatma sırasında kaynaklı başka bir komut dosyası aracılığıyla ayarlanır. Etkileşimli olmayan bir kabuk için, yalnızca bu kabuk aynı zamanda bir oturum açma kabuğuysa ek dosyalar sağlamaya çalışacaktır. (bu durumda o okuyacağız ~/.bash_profile, ~/.bash_loginve ~/.profile... ama bunu yaparken bile, bir sorun yaşadığınız olmaz)

Bakılacak ilk yer, alt kabuğun çağrıldığı ortamdır.

  • Dışa aktarılan bir BASH_ENVdeğişken iletilir. Bunun kaynaklı bir dosyaya gömülebileceğini unutmayın.
  • Komut dosyasını çağıran aynı satırda bir parametre olarak beslenebilir, yani BASH_ENV=blah /path/to/somecommand.sh. Bu ağrılı bir başparmak gibi gözüküyor, bu yüzden muhtemelen yakalamış olacaksınız.

Oturum açtıktan sonra ayarlanıyor ancak nerede olduğunu bulamıyorsanız, giriş ortamını oluşturmaktan neyin sorumlu olduğuna bakmanız gerekebilir.

  • Bir giriş kabuğu tarafından alınan tüm normal dosyalar. man bashkapsamlı liste için.

  • PAM : Yorumlarda önerildiği gibi freiheit tarafından kontrol edilen /etc/security/pam_env.confve başvurulan diğer dosyalar pam_env.so. Diğer PAM modülleri de sorumlu olabilir, ancak PAM yapılandırmanız aynı görünüyorsa, bu muhtemelen geçerli değildir.

  • sshd : Aşağıdaki dosyaları sırayla tarar:

    • ~/.ssh/environment(ana dizine geçmeden önce; yalnızca PermitUserEnvironmentetkinse sshd_config)
    • ~/.ssh/rc (giriş dizinine geçtikten sonra; daima)
    • /etc/ssh/sshrc(yoksa ~/.ssh/rc)

Not: kullanıcının yetkili anahtarlar dosyasındaki satırları sshdda tarar environment=value( PermitUserEnvironmentetkinse), ancak bu adımın yukarıdaki sırayla düştüğü kılavuz sayfasından anlaşılamaz.


Bir fark buldum! PermitUserEnvironment yesçalışma sunucusunda / etc / ssh / sshd_config dizininde ayarlanır, ancak sorun değil. Değiştirdim, ama sadece bir komutu test ettim ve tekrar çalışmadı. Bu dosya her ssh denememde ayrıştırılıyor mu? Üzerinde çalıştığım kullanıcı için ~ / .ssh / rc yok ve her iki sistemde de / etc / ssh / sshrc dosyası yok.
Fesleğen

Sanırım ssh'yi yeniden başlatmam gerekiyor mu? /etc/init.d/sshd?
Fesleğen

@Basil Evet, yeniden başlatmanız gerekiyor sshd. Ayrıca, çalışma sunucusunda sshd, ortamı ayarlayan bir dosya (size verdiğim dosyaları kontrol edin) olabileceği anlamına gelir .
Andrew B

Evet, bu sinir bozucu kısmıydı - ihtiyacım olan her şey .bashrc'de ayarlandı, ki bu sadece çalıştırılmıyordu :) Yardımınız için çok teşekkürler - SSH'yi yeniden başlatmak için bir değişiklik planlıyorum ve geri rapor edeceğim. Sanırım işe yarayacak.
Fesleğen

SSH'yi yeniden başlatmayı bitirdim ve etkileşimli olmayan SSH komutlarım şimdi çalışıyor! Yardımınız için çok teşekkür ederim, bu alanı asla kendi başıma bulamazdım.
Fesleğen
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.