Làm cách nào để tự động chạy các lệnh khi đăng nhập SSH?


18

Bất cứ khi nào tôi đăng nhập vào máy chủ Linux của mình, tôi muốn có một số lệnh chạy tự động (đặt một số biến, thay đổi vị trí, v.v.)

Điều này cần phải được thực hiện khi đăng nhập người dùng, không phải khi bắt đầu hệ thống.

Làm thế nào tôi có thể thiết lập nó để làm điều này?


Bạn cần đọc phần HÓA ĐƠN trong bash (1) ( man bash).
Andrew Schulman

Câu trả lời:


31

Đặt các lệnh trong ~/.bashrc. Bất cứ điều gì trong đó được thực hiện mỗi khi bạn đăng nhập.

Nếu bạn cần các lệnh chỉ chạy khi đăng nhập qua ssh (nhưng không phải khi đăng nhập vật lý), bạn có thể kiểm tra sự hiện diện của SSH_CONNECTIONbiến môi trường và chỉ chạy các lệnh nếu bạn thấy nó tồn tại.


Tôi không đăng nhập bằng root, đó là máy chủ AWS nên tôi phải đăng nhập với tư cách là "người dùng ec2" sau đó đổi sang root bằng "sudo su -". Vậy tôi có nên đặt các lệnh trong "/home/ec2-user/.bashrc" không?

5
Giả định này ~ / .bashrc có nguồn gốc từ ~ / .bash_profile của bạn. ~ / .bash_profile sẽ là tập lệnh được gọi cho shell đăng nhập như ssh. Tôi tin rằng ~ / .bashrc sẽ được gọi nếu bạn mở Terminal Gnome, ví dụ, SAU KHI đã đăng nhập.
dgrant

Bạn đã làm tôi bối rối, hãy để tôi giải thích thêm: Đây là một ví dụ về Dịch vụ web của Amazon, là một máy chủ hầu như không có ai đăng nhập (tôi thậm chí không chắc nó có tồn tại trên thực tế như một máy không). Tôi đăng nhập bằng PUTTY với tên người dùng ec2. Điều này thả tôi trong thư mục / home / ec2-user. Sau đó, tôi thay đổi thành người dùng root bằng cách gõ "sudo su -", sau đó thả tôi vào "/ root", sau đó tôi phải nhập một loạt các lệnh, bao gồm thay đổi lại tôi thành "/ home / ec2-user" và đặt một số các biến, bí danh, v.v ... Vậy ... làm thế nào tôi có thể làm điều này?

Ngoài ra, vì tôi đang thay đổi người dùng, tôi hy vọng rằng trong cấu hình bash của người dùng ec2, tôi chỉ nên đặt "sudo su -", và sau đó các lệnh còn lại trong tệp bash gốc?

LƯU Ý: trên thực tế, đó là .profile được gọi nếu nó tồn tại, trừ khi .bash_profile, tồn tại, sau đó nó được gọi.
dgrant

14

Chỉ cần đặt cái này vào ~ / .bashrc hoặc /etc/bash.bashrc nếu bạn muốn cái này cho tất cả người dùng:

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi

và làm thế nào để tôi mất phiên sau khi đóng thực thi?
điện tử

1
@WHK Ý bạn là gì khi mất phiên?
Llamageddon

@Llamageddon: Tôi nghĩ rằng anh ấy đang tự hỏi điều tương tự tôi. Nếu tôi muốn đặt toàn bộ phiên SSH của mình vào screen, tôi có thể sử dụng câu trả lời của bạn và đặt screenở đó thay vì tiếng vang. Vấn đề với điều đó là việc kết thúc phiên màn hình sẽ trở về dấu nhắc SSH thay vì đăng xuất. Chỉ cần viết ra nhận xét này đã cho tôi câu trả lời, mặc dù: thêm logoutlệnh sau screenlệnh.
zondo

Tuy nhiên, điều này không hoạt động đối với phiên ssh không sử dụng bash, ví dụ như khi tôi mở phiên sftp.
Fabio

@zondo @ e-info128 exec commandsẽ thay thế shell hiện tại bằng bất cứ thứ gì bạn chạy.
Llamageddon

6

Ngoài ra, bạn có thể chỉ định một lệnh sẽ được chạy trong khi gọi ssh:

$ ssh -t server 'cmd; exec bash -l'

Lệnh cuối cùng trong danh sách sẽ bắt đầu một phiên tương tác trong trình bao ưa thích của bạn. Nếu bạn có nhiều lệnh để chạy, hãy xem xét việc tạo tệp tập lệnh trên máy chủ SSH của bạn.


1
Điều này rất hữu ích. Không chắc đó có phải là câu trả lời chính xác cho người hỏi không, nhưng mọi người nên biết về nó, vì nó có thể không rõ ràng. Ví dụ: "ssh user @ host" export x = 5; bash "Sau đó, trong thiết bị đầu cuối bật lên tiếng vang $ x hiển thị 5.
rõ ràng

3

Trên thực tế ~/.ssh/rclà một nơi thích hợp để bạn thêm lệnh để chạy khi bạn đăng nhập, thay vì bất kỳ người dùng nào của hệ thống.

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in,
         just before the user's shell (or command) is started.  See the
         sshd(8) manual page for more information.

Không cần thiết. Đó là một vị trí nơi các lệnh có thể được đặt.
Daniel B


Điều đó có thể THỰC SỰ khiến ai đó gặp rắc rối nếu họ không biết họ đang làm gì. Nó có khả năng hữu ích trong các trường hợp góc, nhưng điều đó có thể THỰC SỰ làm phiền ai đó nếu họ quên họ đặt lệnh ở đó hoặc tên và đường dẫn của tệp đó. Về mặt di truyền, sẽ rất được ưu tiên khi đặt các lệnh đăng nhập khởi động ở vị trí dự kiến, .bashrc ở phía xa và kiểm tra $ SSH_CONNECTION, như các câu trả lời khác ở đây đã đề xuất.
rõ ràng
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.