A Python tool for managing SSH login restrictions and IP-based access control on Linux systems
Project description
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
主要功能菜单
启动工具后,您将看到以下功能菜单:
- 查看当前SSH配置 - 显示当前SSH配置文件内容
- 添加用户-IP限制 - 限制用户只能从指定IP登录
- 移除用户-IP限制 - 移除用户的IP登录限制
- 添加IP白名单 - 添加允许访问的IP地址
- 查看登录失败记录 - 查看最近的SSH登录失败记录
- 封锁恶意IP - 使用iptables封锁恶意IP
- 解除IP封锁 - 解除已封锁的IP地址
- 设置Fail2Ban保护 - 配置Fail2Ban进行动态防护
- 退出 - 退出程序
权限要求
由于需要修改系统配置文件,建议使用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文件。
免责声明
此工具用于系统管理目的。在使用前请确保:
- 理解SSH配置和IP访问控制的工作原理
- 在测试环境中验证配置更改
- 备份重要的系统配置文件(/etc/ssh/sshd_config, /etc/security/access.conf等)
- 了解修改SSH配置和防火墙规则可能带来的安全影响
- 确保有备用的SSH访问方式,以防配置错误导致无法登录
作者对使用此工具造成的任何系统问题不承担责任。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8a4364cf53ee694152bb7a8aec4897f2a2ee34b3591f8bc4f8b168071e20abb
|
|
| MD5 |
4eb7f932f75c3aead2eec08fa00ac60f
|
|
| BLAKE2b-256 |
96f73c25063c1c4c62cf8d99227175a0e85e3d79445c0d64a653e7f84c4dabf9
|
File details
Details for the file ssh_login_manager-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ssh_login_manager-1.0.0-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
761cb055f26d7039655521968e189eef014c9fcd62c1e5b60425afbbd22a8d44
|
|
| MD5 |
ae0c091b1c80b3c72b57e428a3862a39
|
|
| BLAKE2b-256 |
b84dde0dbb852279cd1146877789acfe776822ebb3e6e583092294f42d4d4c8a
|