You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别通过SSH调用脚本的发起方?Ubuntu多主机日志记录实现问询

当然可以实现!这里有几种实用方案

方案1:直接在 provider.sh 中添加日志逻辑

这是最直接的方式,不需要改动SSH配置,只需要修改你的脚本本身:

在 provider.sh 的开头加入以下代码,就能自动记录调用时间、客户端信息和传入的参数:

#!/bin/bash

# 获取调用者的客户端IP(通过SSH连接环境变量)
CLIENT_IP=$(echo "$SSH_CLIENT" | awk '{print $1}')
# 获取登录server1的客户端用户名(就是你SSH命令里的<client_name>)
CLIENT_NAME="$USER"
# 获取当前时间,格式为年-月-日 时:分:秒
CALL_TIME=$(date "+%Y-%m-%d %H:%M:%S")

# 定义日志文件路径,你可以改成自己喜欢的位置
LOG_FILE="/var/log/provider_script_calls.log"

# 写入日志内容,包含时间、客户端信息和调用参数
echo "[$CALL_TIME] 客户端 '$CLIENT_NAME'(IP: $CLIENT_IP)调用脚本,参数:$*" >> "$LOG_FILE"

# 下面是你原来的provider.sh脚本内容...

说明:

  • $SSH_CLIENT 是SSH连接时自动设置的环境变量,格式为 客户端IP 客户端端口 server1端口,用awk提取第一个字段就是客户端IP。
  • $USER 就是客户端用来登录server1的用户名(也就是你命令里的<client_name>),能精准定位是哪个客户端。
  • 记得提前创建日志文件并设置合适的权限,比如:touch /var/log/provider_script_calls.log && chmod 644 $_,避免脚本无写入权限。

方案2:通过SSH服务器配置记录(无需修改原脚本)

如果你不想改动现有的provider.sh,可以通过配置server1的SSH服务来实现全局记录:

  1. 在server1上创建一个日志记录脚本,比如 /usr/local/bin/log_ssh_calls.sh:
#!/bin/bash

# 获取客户端信息
CLIENT_USER="$USER"
CLIENT_IP=$(echo "$SSH_CLIENT" | awk '{print $1}')
CALL_TIME=$(date "+%Y-%m-%d %H:%M:%S")
LOG_FILE="/var/log/ssh_command_calls.log"

# 记录原命令(也就是客户端执行的`/path/to/provider.sh args1 arg2`)
echo "[$CALL_TIME] 用户 '$CLIENT_USER'(IP: $CLIENT_IP)执行命令:$SSH_ORIGINAL_COMMAND" >> "$LOG_FILE"

# 执行客户端原本要运行的命令
exec "$SSH_ORIGINAL_COMMAND"
  1. 给这个脚本添加执行权限:chmod +x /usr/local/bin/log_ssh_calls.sh

  2. 修改server1的SSH配置文件 /etc/ssh/sshd_config,添加以下内容(针对server2和server3的用户):

Match User server2,server3
    ForceCommand /usr/local/bin/log_ssh_calls.sh
  1. 重启SSH服务生效:systemctl restart sshd

说明:

  • ForceCommand 会强制指定用户执行这个日志脚本,然后通过$SSH_ORIGINAL_COMMAND获取用户原本要执行的命令,记录后再执行原命令。
  • 这个方案不仅能记录provider.sh的调用,还能记录这两个用户通过SSH执行的所有命令,适合需要全面监控的场景。

不管选哪种方案,都能完美满足你“记录何时由哪个客户端调用provider.sh”的需求,根据自己的实际情况选就行~

内容的提问来源于stack exchange,提问作者suanziliu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:09:37