ssh_config: chỉ định lệnh sẽ được thực thi trên máy từ xa khi đăng nhập


16

Đây là một bản mở rộng của câu hỏi trước đây của tôi . Tôi cần chạy một lệnh được lưu trữ cục bộ (tức là mount /home) trên một máy từ xa khi đăng nhập ssh. Hiện tại, tôi đang sử dụng:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

Nó hoạt động tốt, nhưng tôi đã tự hỏi liệu tôi có thể đặt lệnh này vào .ssh/configđể tôi không phải gõ nó mỗi lần không. Tôi tìm thấy một LocalCommandtùy chọn, nhưng tôi không thấy bất kỳ RemoteCommandtùy chọn nào .

command-to-be-executedđược nhập và lưu trữ trên máy cục bộ, vì nó sẽ chứa mật khẩu để mở một đĩa được mã hóa. Đó là lý do tại sao tôi không thể đặt lệnh vào .profilemáy từ xa.

Câu trả lời:


6

Câu hỏi này đã được hỏi trước đây trên SuperUser. Câu trả lời đầu tiên sử dụng một tệp từ xa không phù hợp với yêu cầu của bạn, nhưng câu trả lời thứ hai gợi ý sử dụng bí danh cục bộ có thể là giải pháp cho vấn đề của bạn.

Điều quan trọng là lệnh được thực thi sẽ được lưu trữ trên máy cục bộ, vì nó sẽ chứa mật khẩu để mở một đĩa được mã hóa. Đó là lý do tại sao tôi không thể đặt lệnh vào .profile trên máy từ xa.

Điều này có lẽ không an toàn. Nếu tôi sử dụng một echolệnh như một lệnh ssh, nó sẽ hiển thị pstrên máy chủ từ xa:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo

cảm ơn, nhưng trong giải pháp trên SuperUser ~/.ssh/rcđược lưu lại trên máy từ xa. Về nhận xét của bạn về việc pshiển thị các tham số dòng lệnh của tôi (bao gồm cả mật khẩu), điều đó không làm phiền tôi. Đó là máy từ xa mà tôi không tin tưởng. Máy cục bộ của tôi chỉ được sử dụng bởi chính tôi, vì vậy không ai khác có quyền truy cập ps.
Martin Vegter

6
psĐầu ra đó từ máy từ xa. Vấn đề là: mọi thứ bạn cung cấp sshdưới dạng lệnh từ xa sẽ hiển thị trên máy chủ từ xa ps.
Martin von Wittich

1
Vâng, bạn đúng. Cảm ơn đã chỉ ra điều này.
Martin Vegter

1
@MartinvonWittich - Mỗi trang SE đều độc lập nên mỗi trang web có thể có Q và A tương tự nhau miễn là chúng thuộc chủ đề cho trang web cụ thể đó. Khuyến khích sao chép nội dung nếu Q xuất hiện và A ở trên một trang SE khác. Tùy chỉnh nó cho phù hợp để nó vào chủ đề.
slm

7

Điều này đã được thêm vào trong OpenSSH 7.6:

thêm tùy chọn RemoteCommand để chỉ định một lệnh trong tệp cấu hình ssh thay vì đưa nó vào dòng lệnh của máy khách. Điều này cho phép tệp cấu hình xác định lệnh sẽ được thực thi trên máy chủ từ xa.

tham chiếu: https://www.openssh.com/txt/release-7.6



2

Bạn có thể làm điều này với sự hợp tác của máy từ xa như sau.

Trên máy cục bộ của bạn, hãy nhồi lệnh để chạy trong biến môi trường LC_SSH_INITIAL_COMMAND. SSH thường được cấu hình để vượt qua tất cả các biến môi trường của biểu mẫu LC_*, vì đó là các cài đặt ngôn ngữ thông thường.

Trên máy từ xa, hãy chạy eval "$LC_SSH_INITIAL_COMMAND" qua cài đặt theo từng phím trong~/.ssh/authorized_keys hoặc từ ~/.ssh/rc(hãy cẩn thận nếu bạn có ~/.ssh/rctệp, bạn cần cẩn thận khi chạy xauththủ công để chuyển tiếp X11).

Với authorized_keysphương thức này, bạn có thể chạy lệnh tương tự khi phiên SSH thoát (trừ khi quá trình shell bị tắt đột ngột; ít nhất bạn nên bẫy tín hiệu HUP để lệnh của bạn được thực thi ngay cả khi kết nối bị chết).

Tuy nhiên đây không phải là một sự sắp xếp tốt để làm một cái gì đó toàn cầu như gắn một hệ thống tập tin. Bạn cần lưu ý không gắn kết lại nếu hệ thống tập tin đã được gắn kết (ví dụ do lệnh SSH chạy đồng thời) và không ngắt kết nối khi đăng xuất. Đề nghị của tôi cho trường hợp sử dụng này vẫn là thực hiện việc gắn kết một cách rõ ràng, sau đó chạy các lệnh từ xa mà không làm gì đặc biệt và ngắt kết nối khi bạn không còn muốn truy cập hệ thống tệp đó.


0

Tôi đã không thử nó nhưng một cách tiếp cận có thể

  • Khai báo a Subsystemtrên điều khiển từ xa sshd_configthực thi lệnh bạn muốn bằng cách đọc một số vars env
  • Sử dụng SendEnvtrên cục bộ .ssh/configđể chuyển các khóa như vậy đến máy chủ từ xa
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.