ssh 连接后在服务器中自动运行脚本

ssh 连接后在服务器中自动运行脚本

客户端系统与服务器建立 ssh 连接后如何立即在服务器中自动运行脚本

例如:假设用户将使用 ssh 连接从另一个系统(通过局域网连接)登录到我的计算机。那时,我的系统中是否应该自动运行一个脚本(python 或 shell)来执行一些验证?

如何在服务器系统中自动运行脚本?

答案1

您可以通过将以下参数添加到配置文件(/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.

另一个选择是根据每个用户使用 .ssh/rc 文件。

要使用 ForceCommand 方法,只需将其添加到ForceCommand /usr/bin/ownscript文件底部/etc/ssh/sshd_config(在服务器上)。

脚本如下:

#!/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

不要忘记对脚本进行 chmodsudo chmod +x /usr/bin/ownscript

答案2

您可以创建一个/etc/ssh/sshrc文件。请参阅man 8 ssh。如果您希望单个用户使用,请使用~/.ssh/rc

/etc/ssh/sshrc以下是当有人登录您的计算机时通过 dbus 通知您的示例。 不要忘记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"

答案3

要在登录期间执行脚本,请将其添加为 /etc/profile 脚本中的调用。每次登录都会执行此脚本,而不仅仅是 ssh 登录。

相关内容