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

如何用Python脚本获取PAM变量实现SSH登录通知?

用Python替代Shell脚本实现SSH连接PAM通知:可行性与环境变量访问

这个方案完全可行,pam_exec.so模块支持调用任何具备可执行权限的程序,包括Python脚本。只要你的notify-lo.py脚本开头指定了正确的解释器(比如#!/usr/bin/env python3),并且通过chmod +x /usr/local/bin/notify-lo.py赋予了执行权限,就能正常被PAM调用。

关于PAM相关环境变量的访问:PAM会将$PAM_TYPE、$PAM_SERVICE、$PAM_RUSER等变量注入到被调用程序的环境中,在Python里可以通过os.environ字典或者os.getenv()方法直接读取这些变量。

对应原Shell脚本的Python实现示例

#!/usr/bin/env python3
import os
import requests

# 替换为你的Telegram机器人Token和聊天ID
TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
CHAT_ID = "xxxxxxxxxxxxxx"
URL = f"https://api.telegram.org/bot{TOKEN}/sendMessage"

# 只处理open_session类型的PAM事件
pam_type = os.getenv("PAM_TYPE")
if pam_type != "open_session":
    exit(0)

# 收集通知信息
hostname = os.uname().nodename
pam_user = os.getenv("PAM_USER")
pam_rhost = os.getenv("PAM_RHOST")

message = f"Host: {hostname}\nUser: {pam_user}\nRemote Host: {pam_rhost}"

# 发送Telegram通知
try:
    requests.post(URL, data={"chat_id": CHAT_ID, "text": message})
except Exception:
    # 忽略请求异常,避免影响PAM会话流程
    pass

exit(0)

注意事项

  • 若系统未安装requests库,可通过pip install requests安装,或改用标准库urllib实现HTTP请求以消除第三方依赖。
  • 脚本以PAM进程的权限执行,需确保该权限能正常发起网络请求。
  • 保持pam_exec.so配置中的optional选项,避免脚本执行失败影响用户SSH登录流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:30:45