Saya memiliki dua server Linux yang harus dikonfigurasi secara identik, namun perintah ssh ke salah satunya gagal untuk perintah yang memerlukan jalur yang ditentukan dalam ~ / .bashrc. Sebagai contoh, saya dapat menggunakan perintah seperti pwd
keduanya secara interaktif dan melalui ssh, tetapi jika saya mencoba menjalankan program yang terletak di folder bin aplikasi, itu hanya bekerja di shell interaktif untuk salah satu server.
File / etc / profile dan / etc / environment pada kedua server identik, namun $ BASH_ENV diatur ke ~ / .bashrc pada server yang berfungsi dengan baik. Saya ingin menetapkan $ BASH_ENV pada server yang tidak berfungsi, tapi saya lebih suka mengaturnya di lokasi yang sama seperti yang diatur di server yang berfungsi. Apa saja tempat yang akan dijalankan Linux pada saat login non-interaktif, seperti perintah ssh dari komputer lain?
sunting: Baris di / etc / passwd untuk pengguna menentukan / bin / bash di kedua server. File ~ / .bash_profile untuk kedua server identik, dan berisi if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
. Satu-satunya perbedaan antara sistem adalah $ BASH_ENV adalah string nol pada server yang tidak berfungsi, dan saya tidak dapat menemukan di mana pengaturannya di server yang berfungsi.
edit 2: File ~ / .ssh / environment di kedua server memiliki BASH_ENV = ~ / .bashrc
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Jawaban:
BASH_ENV
hanya akan diatur melalui lingkungan, atau skrip lain yang bersumber selama inisialisasi. Untuk shell non-interaktif, itu hanya akan mencoba untuk mencari file tambahan jika shell itu juga shell login. (dalam hal ini akan membaca~/.bash_profile
,,~/.bash_login
dan~/.profile
... tetapi jika itu melakukan itu, Anda tidak akan mengalami masalah)Tempat pertama untuk melihat adalah lingkungan di mana subkulit dipanggil.
BASH_ENV
Variabel yang diekspor akan dilewati. Perlu diingat bahwa ini dapat dikubur dalam file bersumber.BASH_ENV=blah /path/to/somecommand.sh
. Ini menonjol seperti jempol sehingga Anda mungkin akan menangkapnya.Jika diset setelah Anda masuk tetapi Anda tidak tahu di mana, Anda mungkin perlu melihat apa yang bertanggung jawab untuk membangun lingkungan login.
Semua file biasa yang bersumber dari shell login.
man bash
untuk daftar lengkap.PAM : Seperti yang disarankan freiheit dalam komentar, periksa
/etc/security/pam_env.conf
, dan file tambahan apa pun yang dirujuk olehpam_env.so
. Modul PAM lainnya juga bisa bertanggung jawab, tetapi jika konfigurasi PAM Anda terlihat sama, mungkin ini bukan masalahnya.sshd : Ini akan memindai file-file berikut, dengan urutan:
~/.ssh/environment
(sebelum mengubah ke direktori home; hanya jikaPermitUserEnvironment
diaktifkan disshd_config
)~/.ssh/rc
(setelah berganti ke direktori home; selalu)/etc/ssh/sshrc
(jika~/.ssh/rc
tidak ada)Catatan:
sshd
juga akan memindaienvironment=value
baris dalam file kunci resmi pengguna (jikaPermitUserEnvironment
diaktifkan), tetapi tidak jelas dari halaman manual di mana langkah itu jatuh dalam urutan di atas.sumber
PermitUserEnvironment yes
diatur di / etc / ssh / sshd_config di server yang berfungsi, tetapi bukan yang bermasalah. Saya mengubahnya, tetapi saya baru saja menguji sebuah perintah dan tidak berhasil lagi. Apakah file ini diuraikan setiap kali saya mencoba ssh? Saya tidak punya ~ / .ssh / rc untuk pengguna yang sedang saya kerjakan, dan tidak ada file / etc / ssh / sshrc di kedua sistem.sshd
. Ini juga berarti mungkin ada file di server yang berfungsi (periksa daftar yang saya berikan untuk Andasshd
) yang mengatur lingkungan.