Skip to main content

SSH Login Manager

一个专注于SSH登录限制和IP访问控制的Python工具,用于管理Linux系统的SSH登录安全。

功能特性

  • 🔐 用户-IP绑定: 限制用户只能从指定IP登录SSH
  • 🌐 IP访问控制: 基于IP地址的访问限制管理
  • 📊 登录监控: 实时监控SSH登录失败记录
  • 🚫 IP封锁: 自动封锁恶意IP地址
  • 🛡️ Fail2Ban集成: 集成Fail2Ban进行动态防护
  • 💾 自动备份: 修改前自动备份配置文件
  • 🖥️ 交互界面: 友好的命令行交互界面

安装

从源码安装

# 克隆仓库
git clone https://gitee.com/liumou_site/ssh-pam-management.git
cd ssh-pam-management

# 安装到系统
pip3 install .

# 或者使用开发模式
pip3 install -e .

从PyPI安装(未来版本)

pip3 install ssh-login-manager

使用方法

交互式界面

# 启动交互式界面
ssh-login-manager

主要功能菜单

启动工具后,您将看到以下功能菜单:

  1. 查看当前SSH配置 - 显示当前SSH配置文件内容
  2. 添加用户-IP限制 - 限制用户只能从指定IP登录
  3. 移除用户-IP限制 - 移除用户的IP登录限制
  4. 添加IP白名单 - 添加允许访问的IP地址
  5. 查看登录失败记录 - 查看最近的SSH登录失败记录
  6. 封锁恶意IP - 使用iptables封锁恶意IP
  7. 解除IP封锁 - 解除已封锁的IP地址
  8. 设置Fail2Ban保护 - 配置Fail2Ban进行动态防护
  9. 退出 - 退出程序

权限要求

由于需要修改系统配置文件,建议使用root权限运行:

sudo ssh-login-manager

项目结构

ssh-login-manager/
├── src/
│   └── ssh_login_manager/
│       ├── __init__.py              # 包初始化
│       ├── main.py                  # 主入口点
│       ├── ssh_config_manager.py    # SSH配置管理器
│       ├── ip_access_manager.py     # IP访问控制管理器
│       ├── login_monitor.py         # 登录监控器
│       └── ssh_cli_interface.py     # SSH命令行交互界面
├── pyproject.toml                   # 现代打包配置
├── setup.py                        # 兼容性打包配置
├── README.md                       # 项目文档
└── LICENSE                         # 许可证文件

模块说明

ssh_config_manager.py

  • SSHConfigManager类: 负责管理SSH配置文件
  • 读取和修改SSH配置文件(/etc/ssh/sshd_config)
  • 支持用户-IP绑定配置管理
  • 自动备份机制确保操作安全

ip_access_manager.py

  • IPAccessManager类: 核心IP访问控制功能
  • 管理基于pam_access.so的IP访问限制
  • 支持IP白名单和黑名单管理
  • 处理access.conf配置文件

login_monitor.py

  • LoginMonitor类: 登录失败监控功能
  • 实时监控SSH登录失败记录
  • 统计IP登录失败次数
  • 集成iptables进行IP封锁

ssh_cli_interface.py

  • SSHCLIInterface类: 用户交互界面
  • 提供菜单驱动的命令行操作
  • 集成所有SSH登录管理功能

技术实现

用户-IP绑定

通过修改SSH配置文件实现用户与特定IP的绑定:

# 在/etc/ssh/sshd_config中添加
Match User username Address 192.168.1.100
    PasswordAuthentication yes

IP访问控制

使用pam_access.so模块进行IP级别的访问控制:

# 在/etc/security/access.conf中添加
+ : username : 192.168.1.100
- : ALL : ALL

登录失败监控

通过解析系统日志文件监控SSH登录失败:

# 监控/var/log/auth.log中的失败记录
Failed password for username from 192.168.1.100

IP封锁

使用iptables封锁恶意IP:

# 添加iptables规则封锁IP
iptables -A INPUT -s 192.168.1.100 -j DROP

开发

设置开发环境

# 克隆项目
git clone https://gitee.com/liumou_site/ssh-pam-management.git
cd ssh-pam-management

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装开发依赖
pip install -e .

运行测试

# 运行基本功能测试
python -m pytest tests/

# 运行代码风格检查
flake8 src/

# 运行类型检查
mypy src/

贡献

欢迎提交Issue和Pull Request来改进这个项目。

许可证

本项目采用MIT许可证。详见LICENSE文件。

免责声明

此工具用于系统管理目的。在使用前请确保:

  1. 理解SSH配置和IP访问控制的工作原理
  2. 在测试环境中验证配置更改
  3. 备份重要的系统配置文件(/etc/ssh/sshd_config, /etc/security/access.conf等)
  4. 了解修改SSH配置和防火墙规则可能带来的安全影响
  5. 确保有备用的SSH访问方式,以防配置错误导致无法登录

作者对使用此工具造成的任何系统问题不承担责任。

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ssh_login_manager-1.0.0.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ssh_login_manager-1.0.0-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file ssh_login_manager-1.0.0.tar.gz.

File metadata

  • Download URL: ssh_login_manager-1.0.0.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for ssh_login_manager-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e8a4364cf53ee694152bb7a8aec4897f2a2ee34b3591f8bc4f8b168071e20abb
MD5 4eb7f932f75c3aead2eec08fa00ac60f
BLAKE2b-256 96f73c25063c1c4c62cf8d99227175a0e85e3d79445c0d64a653e7f84c4dabf9

See more details on using hashes here.

File details

Details for the file ssh_login_manager-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ssh_login_manager-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 761cb055f26d7039655521968e189eef014c9fcd62c1e5b60425afbbd22a8d44
MD5 ae0c091b1c80b3c72b57e428a3862a39
BLAKE2b-256 b84dde0dbb852279cd1146877789acfe776822ebb3e6e583092294f42d4d4c8a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page