~ / .profile không được tải khi sử dụng SSH (Ubuntu)


22

Chỉnh sửa để phản ánh vấn đề tôi thực sự muốn giải quyết:

Tôi cần thiết lập môi trường ruby ​​của mình để có thể triển khai qua Capistrano.

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

Tôi đặt chúng trong ~ triển khai / .profile, nhưng khi tôi ssh vào, chúng không được chạy. Ý tưởng?

Tôi đang chạy Ubuntu 12.04.


Câu hỏi ban đầu là:

Khi tôi ssh vào một tài khoản khác tại localhost, nó không tải .profile của tôi. Làm thế nào tôi có thể buộc ssh tải nó? Tôi đang chạy Ubuntu 12.04.

Câu trả lời:


15

Bạn có thể chỉ định rõ ràng rằng bạn muốn bắt đầu một vỏ đăng nhập tương tác:

 ssh user@host bash --login -i 

Các "vai trò" của ~/.profile(. Hoặc ~ / bash_profile) và .bashrccho ssh có một số tác phẩm khác, (xem man sshđể biết chi tiết):

~ / .ssh / môi trường

Chứa các định nghĩa bổ sung cho các biến môi trường; xem MÔI TRƯỜNG, ở trên.

~ / .ssh / RC

Các lệnh trong tệp này được thực thi bởi ssh khi người dùng đăng nhập, ngay trước khi trình bao (hoặc lệnh) của người dùng được khởi động. Xem trang hướng dẫn sshd (8) để biết thêm thông tin.


Bạn có thể thường không đúng vì ssh đang được điều hành bởi một số công cụ khác (phân phối liên tục) và lệnh không thể dễ dàng thay đổi.
Jan Hudec

6

.profilechỉ được tải cho shell đăng nhập, mà phiên ssh không (theo mặc định). Nếu bạn muốn một cái gì đó chạy khi khởi động cho tất cả các shell tương tác, .bashrcthay vào đó hãy đặt nó vào ( .zshrchoặc bất cứ thứ gì mà shell của bạn sử dụng).

Ngoài ra, nếu bạn chỉ muốn đăng nhập vào một tài khoản khác trên máy cục bộ, ssh có thể là quá mức cần thiết. Bạn có thể muốn sử dụng suhoặc một cái gì đó thay thế.


3
Có vẻ như .bashrcnó cũng không được tải.
kenorb

Điều này là không chính xác. Nó một vỏ đăng nhập. Từ trang man: "Nếu lệnh được chỉ định, nó được thực thi trên máy chủ từ xa thay vì vỏ đăng nhập."
mkj


Khi ssh được cung cấp một lệnh để chạy, nó mặc định không phân bổ một tty và sau đó shell cũng không phải là tương tác.
Jan Hudec

4

Sử dụng bash sẽ dẫn đến việc đọc ~/.bashrc. Những điều sau đây có thể giúp với ksh và sh (bash ở chế độ sh) hoặc khi bạn ~/.bashrckhông được thực thi trong khi đăng nhập.

Các sshd tư vấn ~/.ssh/environment(kiểm tra sshd_config (5) để biết quyền) và ~/.ssh/sshrchoặc ~/.ssh/rc. Điều này mang lại khả năng thiết lập ENV=~/.profilehoặc BASH_ENV=~/.profileSSH_LOGIN=Y

Trong ~/.profileTôi có bố cục sau (Thay thế ENVbằng BASH_ENVkhi sử dụng bash):


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation


0

Bash ~/.profilechỉ đọc khi nó là một vỏ đăng nhập và ~/.bash.bashrcchỉ khi nó có một thiết bị đầu cuối, cả hai đều không đúng theo mặc định khi gọi một lệnh với ssh. Tuy nhiên, có một số tùy chọn khác để đặt môi trường, trên máy chủ, tất cả đều không may tùy thuộc vào thiết lập hệ thống:

  • Zsh đọc ~/.zshenvngay cả trong trường hợp này; không có tập tin cấu hình tương ứng cho bash mặc dù.
  • Nếu PermitUserEnvironmenttùy chọn được bật /etc/sshd_config, ssh sẽ đọc ~/.ssh/environment. Thật không may, tùy chọn này mặc định tắt.
  • Nếu pam_env.sođược gọi với user_readenv=1in /etc/pam.d/sshd, nó sẽ đọc ~/.pam_environment. Mặc dù nó không phải là mặc định của mô-đun, nhưng nó được gọi theo cách đó ít nhất là trong Ubuntu .
  • Nếu vẫn thất bại, bạn có thể đặt một lệnh command=trong tệp khóa được ủy quyền gọi tập lệnh bao bọc đặt môi trường và thực thi $SSH_ORIGINAL_COMMANDở cuối (Tôi lệnh là một cho shell, vì vậy eval thích hợp ở đây, nhưng tôi không chắc) .

0

Bạn có thể có một ~/.bash_profile, mà ghi đè ~/.profile.

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.