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


11

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

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

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


Answers:


14

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

别忘了修改脚本 sudo chmod +x /usr/bin/ownscript


谢谢你的回答。您能给一个示例命令吗?
发烧友

但是force命令是在服务器(管理员登录)还是在客户端登录中执行命令?我想在服务器登录中执行命令
发烧友

1
该命令在服务器上发出。只需在配置的底部添加ForceCommand /path/command.script即可完成操作。但是,我遇到了它将仅执行此命令的过程,因此您需要在脚本文件中启动shell。为了提高可读性,我将在原始答案中添加一个示例。
2013年

谢谢。我可以运行python脚本而不是shell脚本吗?
2013年

假设我执行了我的自定义命令,是否有任何方法可以检索用户的IP地址和登录名(我想知道是因为我的命令执行了哪个登录?
发烧友

4

您可以创建一个/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"

1

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


我只担心使用ssh连接连接的客户端系统
发烧友

1
如果用户使用不同的外壳,因为不是所有外壳都来自/ etc / profile,这将不能始终如一地工作。
bschlueter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.