Chạy script tự động trong máy chủ sau khi kết nối ssh


11

Làm thế nào để chạy tập lệnh tự động trong máy chủ ngay sau khi hệ thống máy khách thiết lập kết nối ssh với máy chủ

ví dụ: giả sử người dùng sẽ đăng nhập vào máy tính của tôi từ một hệ thống khác (được kết nối qua lan) bằng kết nối ssh. Vào thời điểm đó, tập lệnh (python hoặc shell) sẽ được chạy tự động trong hệ thống của tôi để thực hiện một số xác nhận?

Làm thế nào để chạy tập lệnh tự động trong hệ thống máy chủ?


Câu trả lời:


14

Bạn có thể làm như vậy bằng cách thêm tham số sau vào tệp cấu hình của mình (/ etc / ssh / sshd_config).

 ForceCommand
         Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present.  The command is invoked by using the user's login shell
         with the -c option.  This applies to shell, command, or subsystem execution.  It is most useful inside a Match block.  The command originally supplied by the client is available in the
         SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with
         ChrootDirectory.

Một tùy chọn khác là sử dụng các tệp .ssh / rc trên cơ sở mỗi người dùng.

Để sử dụng phương thức ForceCommand, bạn chỉ cần thêm ForceCommand /usr/bin/ownscriptở dưới cùng của tệp /etc/ssh/sshd_config(trên máy chủ).

Kịch bản trông như thế này:

#!/bin/bash
#Script file for ssh
#
#put your commands here
echo "test" > /tmp/test.txt
#
#exit by calling a shell to open for the ssh session
/bin/bash

Đừng quên chmod script sudo chmod +x /usr/bin/ownscript


cảm ơn câu trả lời Bạn có thể vui lòng đưa ra một ví dụ lệnh
Nhiệt tình

Nhưng liệu lực lượng thực thi lệnh trong máy chủ (đăng nhập quản trị viên) hoặc trong đăng nhập máy khách? Tôi muốn thực thi lệnh trong đăng nhập máy chủ
Nhiệt tình

1
Lệnh được ban hành trên máy chủ. Chỉ cần thêm ForceCommand /path/command.script ở cuối cấu hình của bạn sẽ thực hiện thủ thuật. Tuy nhiên, tôi gặp phải nó sẽ thực thi lệnh này vì vậy bạn cần khởi động shell trong scriptfile của mình. Để dễ đọc hơn tôi sẽ thêm một ví dụ vào câu trả lời ban đầu của mình.
Yêu cầu

cảm ơn bạn. Tôi có thể chạy kịch bản python thay vì shell script không?
Nhiệt tình

giả sử tôi thực hiện lệnh tùy chỉnh của tôi, Có cách nào để lấy địa chỉ IP và tên đăng nhập của người dùng (Tôi muốn biết vì trong đó đăng nhập lệnh của tôi đã thực hiện?
Enthusiast

4

Bạn có thể tạo một /etc/ssh/sshrctập tin. Xem man 8 ssh. Nếu bạn muốn điều này cho một người dùng, sử dụng ~/.ssh/rc.

Dưới đây là một mẫu /etc/ssh/sshrcsẽ thông báo cho bạn qua dbus khi ai đó đăng nhập vào máy của bạn. Đừng quên chmod +x:

#!/bin/bash

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

notify-send -u CRITICAL "SSH connection from ${ip}" "User $USER just logged in from $ip"

1

Để thực thi tập lệnh trong khi đăng nhập, hãy thêm nó dưới dạng cuộc gọi từ trong tập lệnh / etc / profile. Điều này được thực hiện cho mỗi lần đăng nhập, không chỉ cho đăng nhập ssh.


Tôi lo ngại về chỉ các hệ thống máy khách được kết nối bằng kết nối ssh
Nhiệt tình

1
Điều này sẽ không hoạt động một cách nhất quán nếu người dùng có các shell khác nhau vì không phải tất cả các nguồn / etc / profile của shell.
bschlueter
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.