Làm cách nào để thiết lập PATH khi chạy lệnh ssh?


18

Giả sử người dùng có /bin/bashvỏ trong /etc/passwd. Sau đó ssh user@host commandchạy lệnh bằng Bash. Tuy nhiên, shell đó không đăng nhập cũng không tương tác, có nghĩa là ~/.bash_profilekhông ~/.bashrccó nguồn gốc. Trong trường hợp đó làm thế nào để thiết lập PATHbiến môi trường để có thể tìm thấy và thực thi? Có nên tiền tố lệnh thực tế với source ~/.bashrc?


5
.bashrccó nguồn gốc, nhưng nó có thể có một bài kiểm tra về tính tương tác ở đầu. Những điều bạn đặt trước kiểm tra đó sẽ được áp dụng và đó là những gì tôi làm để buộc PATH khi máy chủ không cho phép môi trường người dùng hoặc sử dụng ~/.pam_environment.
muru

Câu trả lời:


18

Bạn có một vài khả năng:

  • Đặt PATHtrên máy chủ trong ~/.ssh/environment(nhu cầu để được kích hoạt bởi PermitUserEnvironment yestrong sshd_config).
  • Sử dụng đường dẫn đầy đủ đến nhị phân
  • Như bạn đã đề cập, nguồn thủ công .bashrc: tiền tố lệnh với . ~/.bashrc(hoặc source)

Nó khá nhiều phụ thuộc vào trường hợp sử dụng, con đường bạn sẽ đi.


6
Tìm nguồn cung ứng thủ công ~/.bashrckhông phải là cần thiết, nó xảy ra theo mặc định. Thực tế, nó có vẻ như là một ý tưởng tồi.
sorontar

$PATHkhông mở rộng từ ~/.ssh/environment, ít nhất là không trong OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019.
Jaakko

1
@Jaakko Có lẽ nó bị vô hiệu hóa trong sshd_config bằng cách sử dụng PermitUserEnvironment(mặc định trong các phiên bản gần đây)
Jakuje

Tôi đã hiểu ra, nó không mở rộng vì tôi đã thêm một dòng PATH="$PATH:/new/path"vào ~/.ssh/environmentkhi nó đáng lẽ phải cóPATH=$PATH:/new/path
Jaakko

4

Bạn đang đánh đồng các cài đặt cục bộ với các cài đặt từ xa .

Tại địa phương, một ví dụ bash, shell hiện tại mà bạn viết:

ssh user@host command

Sẽ thực thi lệnh ssh (không có gì nữa) dưới dạng ssh client.
Để làm như vậy, shell cục bộ không cần phải khởi động shell phụ hoặc shell mới hoặc đăng nhập.

Lệnh được thực thi như một lslệnh là: cục bộ.

Đó là lệnh ssh client mở kết nối mạng tới một hệ thống từ xa , trong đó, nếu được xác thực chính xác, một shell mới sẽ được bắt đầu để thực thi lệnh được viết dưới dạng đối số cho ssh, hoặc, nếu không có đối số nào được đưa ra, hãy chờ các lệnh tiếp theo trên kết nối đó.

Remote shell mới đó nhất thiết phải là shell đăng nhập vì người dùng từ xa (với hệ thống đó) cần được xác thực để đăng nhập. Hoặc, nếu một số lệnh cụ thể được đưa ra, chỉ cần chạy lệnh đó với các đặc quyền người dùng được xác thực.

Bạn có thể xem tệp nào có nguồn gốc bằng cách thêm a $file sourcedvào đầu mỗi tệp (trong hệ thống từ xa ) (cần root để thay đổi /etc/tệp):

$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done

Và sau đó chỉ cần bắt đầu một giao diện điều khiển ssh:

$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read

Trong trường hợp này, cả hai bashrctệp đều được đọc vì mỗi profiletệp có các lệnh để bao gồm chúng, không phải vì vỏ đăng nhập trực tiếp có nguồn gốc chúng.

$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read

Trong hệ thống này, nơi bashrcđược đọc trong cả hai trường hợp.

Không cần thêm a source ~/.bashrcvào lệnh để thực thi.

Thay đổi lộ trình

Tất cả những gì bạn cần làm là bao gồm các cài đặt chính xác để thay đổi "$ PATH", /etc/bash.bashrccho tất cả người dùng bắt đầu hệ vỏ trong hệ thống này. Hoặc trong ~/.bashrcmỗi người dùng cần nó. Bạn có thể thêm (hoặc chỉnh sửa) một bộ xương của một người sử dụng .bashrcđể /etc/skel/có bất kỳ người dùng mới được tạo ra có đúng file có sẵn.

Ở trên chỉ có giá trị cho bash. Nếu bạn cần cài đặt để hoạt động cho tất cả các hệ vỏ, có thể thiết lập biến môi trường PATH bằng tệp ssh ~/.ssh/environmentcho mỗi người dùng cần nó. Hoặc sử dụng /etc/ssh/sshrccho cài đặt toàn cục trong hệ thống nơi máy chủ ssh đang chạy (vui lòng đọc phần Tệp man sshdđể biết thêm chi tiết).

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.