$ BASH_ENV thường được đặt ở đâu?


19

Tôi có hai máy chủ Linux cần được cấu hình giống hệt nhau, tuy nhiên các lệnh ssh cho một trong số chúng không thành công đối với các lệnh yêu cầu đường dẫn được chỉ định trong ~ / .bashrc. Ví dụ: tôi có thể sử dụng một lệnh như pwdcả tương tác và thông qua ssh, nhưng nếu tôi thử chạy một chương trình nằm trong thư mục bin ứng dụng, nó chỉ hoạt động trong một vỏ tương tác cho một trong các máy chủ.

Tệp / etc / profile và / etc / môi trường trên cả hai máy chủ giống hệt nhau, tuy nhiên $ BASH_ENV được đặt thành ~ / .bashrc trên máy chủ đang hoạt động đúng. Tôi muốn đặt $ BASH_ENV trên máy chủ không hoạt động, nhưng tôi muốn đặt nó ở cùng vị trí với máy chủ đang hoạt động. Những nơi mà Linux sẽ chạy tại thời điểm đăng nhập không tương tác, chẳng hạn như lệnh ssh từ một máy tính khác?

chỉnh sửa: Dòng trong / etc / passwd cho người dùng chỉ định / bin / bash trên cả hai máy chủ. Tệp ~ / .bash_profile cho cả hai máy chủ là giống hệt nhau và chứa if [ -f ~/.bashrc ]; then . ~/.bashrc; fi. Sự khác biệt duy nhất giữa các hệ thống là $ BASH_ENV là một chuỗi null trên máy chủ không hoạt động và tôi không thể tìm thấy nơi nó được đặt trong máy chủ đang hoạt động.

chỉnh sửa 2: Tệp ~ / .ssh / môi trường trên cả hai máy chủ có BASH_ENV = ~ / .bashrc


1
Là / etc / passwd giống hệt nhau trên cả hai máy chủ? Nếu bash được gọi là "/ bin / sh" thay vì "/ bin / bash" thì nó sẽ không đọc bất kỳ tệp bashrc nào (chỉ các tệp hồ sơ).
freiheit

Không giống nhau, nhưng người dùng tôi đang gửi các lệnh có cùng dòng trong / etc / passwd trên cả hai hệ thống.
Basil

Và còn ~ / .profile và ~ / .bash_profile thì sao?
freiheit

chúng giống hệt nhau và cả hai đều chứaif [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Basil

Bạn đã xác minh rằng / etc / bashrc và /etc/profile.d/* giống hệt nhau chưa? ~ / .bash_login? /etc/pam.d/*? /etc/security/pam_env.conf?
freiheit

Câu trả lời:


21

BASH_ENVsẽ chỉ được đặt qua môi trường hoặc tập lệnh khác có nguồn gốc trong quá trình khởi tạo. Đối với hệ vỏ không tương tác, nó sẽ chỉ cố gắng tìm nguồn tệp bổ sung nếu vỏ đó cũng là vỏ đăng nhập. (trong trường hợp nó sẽ đọc ~/.bash_profile, ~/.bash_login~/.profile... nhưng nếu nó đang làm điều đó, bạn sẽ không gặp phải vấn đề gì)

Nơi đầu tiên để tìm là môi trường mà lớp con đang được gọi.

  • Một BASH_ENVbiến xuất sẽ được thông qua. Hãy nhớ rằng điều này có thể được chôn trong một tập tin có nguồn gốc.
  • Nó có thể được cung cấp dưới dạng một tham số trên cùng một dòng gọi tập lệnh, nghĩa là BASH_ENV=blah /path/to/somecommand.sh. Điều này nổi bật như một ngón tay cái đau nên bạn có thể đã bắt được nó.

Nếu nó được đặt sau khi bạn đăng nhập nhưng bạn không thể tìm ra nơi nào, bạn có thể cần xem xét những gì chịu trách nhiệm xây dựng môi trường đăng nhập.

  • Tất cả các tệp thông thường có nguồn gốc từ một vỏ đăng nhập. man bashcho danh sách đầy đủ.

  • PAM : Như freiheit đã đề xuất trong các nhận xét, kiểm tra /etc/security/pam_env.confvà bất kỳ tệp bổ sung nào được tham chiếu bởi pam_env.so. Các mô-đun PAM khác cũng có thể chịu trách nhiệm, nhưng nếu cấu hình PAM của bạn trông giống hệt nhau thì đây có thể không phải là trường hợp.

  • sshd : Nó sẽ quét các tệp sau, theo thứ tự:

    • ~/.ssh/environment(trước khi thay đổi thư mục chính; chỉ khi PermitUserEnvironmentđược bật trong sshd_config)
    • ~/.ssh/rc (sau khi thay đổi thư mục chính; luôn luôn)
    • /etc/ssh/sshrc(nếu ~/.ssh/rckhông có mặt)

Lưu ý: sshdcũng sẽ quét các environment=valuedòng trong tệp khóa được ủy quyền của người dùng (nếu PermitUserEnvironmentđược bật), nhưng không rõ ràng từ trang man nơi bước đó rơi vào trình tự trên.


Tôi tìm thấy một sự khác biệt! PermitUserEnvironment yesđược đặt trong / etc / ssh / sshd_config trên máy chủ hoạt động, nhưng không phải là vấn đề. Tôi đã thay đổi nó, nhưng tôi chỉ thử một lệnh và nó không hoạt động trở lại. Tập tin này có được phân tích cú pháp mỗi khi tôi cố gắng ssh in không? Tôi không có ~ / .ssh / rc cho người dùng tôi đang làm việc và không có tệp / etc / ssh / sshrc trên cả hai hệ thống.
Basil

Oh, tôi nghĩ rằng tôi cần phải khởi động lại ssh? /etc/init.d/sshd?
Basil

@Basil Vâng, bạn cần khởi động lại sshd. Điều đó cũng có nghĩa là có thể có một tệp trên máy chủ hoạt động (kiểm tra danh sách những cái tôi đã cho bạn sshd) đang thiết lập môi trường.
Andrew B

Vâng, đó là phần bực bội - mọi thứ tôi cần đều được đặt trong .bashrc, phần chưa được chạy :) Cảm ơn rất nhiều vì sự giúp đỡ của bạn- Tôi đang lên kế hoạch thay đổi để xác định lại SSH và tôi sẽ báo cáo lại. Tôi cho rằng nó sẽ hoạt động.
Basil

Tôi vừa hoàn thành việc khởi tạo lại SSH và các lệnh SSH không tương tác của tôi hiện đang hoạt động! Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn, tôi chưa bao giờ tự mình tìm thấy lĩnh vực đó.
Basil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.