密码管理软件领域已经涌现出众多知名产品,例如Bitwarden、1Password、LastPass等主流解决方案,但本文将聚焦于一款相对小众却功能完备的私人密码管理服务——Passky。尽管Passky在公众视野中的知名度较低,但它实际上已经发展成为一套成熟的密码管理生态系统,全面支持Windows、Mac、Android等操作系统平台,并且提供了浏览器扩展插件等多样化客户端选择。
接下来,我们将通过实际操作来全面体验Passky的各项功能特性。
Docker环境部署与配置
首先需要配置docker-compose.yml文件来定义服务组件:
services:
passky-server:
container_name: passky-server
image: 'rabbitcompany/passky-server:latest'
env_file:
- .env
ports:
- "3380:80"
volumes:
- "./data/web:/var/www/html/databases"
depends_on:
- redis
- mysql
redis:
image: redis:6.2-alpine
container_name: passky-redis
mysql:
image: mariadb:11.1.2
environment:
- MARIADB_USER=passky
- MARIADB_PASSWORD=passky
- MARIADB_DATABASE=passky
- MARIADB_ROOT_PASSWORD=passky4root
volumes:
- "./data/mysql:/var/lib/mysql"
ports:
- "13306:3306" # 将数据库端口映射到主机
接着配置.env环境变量文件:
SERVER_CORES=4 # 为Passky服务分配4个CPU核心
ADMIN_USERNAME="adminer" # 设置管理员账户用户名
ADMIN_PASSWORD="adminer" # 设置管理员账户密码
SERVER_LOCATION=CN # 设置服务器地理位置
ACCOUNT_MAX=64 # 配置最大用户账号数量
ACCOUNT_MAX_PASSWORDS=80000 # 设置每个账号支持的最大密码数量
ACCOUNT_PREMIUM=80000 # 高级账户密码数量限制
DATABASE_ENGINE=mysql # 选择MySQL作为数据库引擎
DATABASE_FILE= # SQLite数据库文件路径留空
MYSQL_HOST="192.168.31.30" # MySQL服务器主机地址
MYSQL_PORT=13306 # MySQL服务端口号
MYSQL_DATABASE="passky" # 使用的数据库名称
MYSQL_USER="passky" # 数据库用户名
MYSQL_PASSWORD="passky" # 数据库访问密码
MYSQL_SSL=false # 禁用SSL连接
MYSQL_CACHE_MODE=0 # 数据库缓存模式设置
MYSQL_SSL_CA=/etc/ssl/certs/ca-certificates.crt # SSL证书路径
MAIL_ENABLED=false # 禁用邮件功能
MAIL_HOST= # 邮件服务器地址
MAIL_PORT=465 # 邮件服务器端口
MAIL_USERNAME= # 邮件账户用户名
MAIL_PASSWORD= # 邮件账户密码
MAIL_USE_TLS=true # 启用TLS加密
LIMITER_ENABLED=false # 禁用API限制器
LIMITER_GET_INFO=-1 # 获取信息频率限制
LIMITER_GET_STATS=-1 # 获取统计信息限制
LIMITER_GET_TOKEN=3 # 获取令牌频率限制
LIMITER_GET_PASSWORDS=2 # 获取密码频率限制
LIMITER_SAVE_PASSWORD=2 # 保存密码频率限制
LIMITER_EDIT_PASSWORD=2 # 编辑密码频率限制
LIMITER_DELETE_PASSWORD=2 # 删除密码频率限制
LIMITER_DELETE_PASSWORDS=10 # 批量删除密码限制
LIMITER_CREATE_ACCOUNT=10 # 创建账户频率限制
LIMITER_DELETE_ACCOUNT=10 # 删除账户频率限制
LIMITER_IMPORT_PASSWORDS=10 # 导入密码频率限制
LIMITER_FORGOT_USERNAME=60 # 忘记用户名请求限制
LIMITER_ENABLE_2FA=10 # 启用双因素认证限制
LIMITER_DISABLE_2FA=10 # 禁用双因素认证限制
LIMITER_ADD_YUBIKEY=10 # 添加YubiKey限制
LIMITER_REMOVE_YUBIKEY=10 # 移除YubiKey限制
LIMITER_UPGRADE_ACCOUNT=10 # 升级账户限制
LIMITER_GET_REPORT=-1 # 获取报告限制
YUBI_CLOUD=https://api.yubico.com/wsapi/2.0/verify # YubiCloud验证地址
YUBI_ID=67857 # YubiKey标识符
CF_TURNSTILE_SITE_KEY=1x00000000000000000000AA # Cloudflare站点密钥
CF_TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA # Cloudflare密钥
REDIS_HOST=redis # Redis服务器主机名
REDIS_PORT=6379 # Redis服务端口
REDIS_PASSWORD= # Redis认证密码
REDIS_LOCAL_HOST=redis # 本地Redis主机
REDIS_LOCAL_PORT=6379 # 本地Redis端口
REDIS_LOCAL_PASSWORD= # 本地Redis密码
在启动服务之前,有必要分享一些实际部署过程中遇到的挑战与解决方案:
- 官方文档声称支持SQLite数据库,但实际上该功能并未完全实现,通过深入研究官方代码仓库的问题反馈,发现没有任何成功使用SQLite的实际案例
- 连接MySQL数据库时,无法通过Docker Compose的链接机制直接建立连接,必须填写NAS设备的物理IP地址,并且需要将MySQL服务端口明确映射到主机
现在可以通过执行命令docker compose up -d启动所有服务组件,然后在浏览器中访问http://<nas-ip>:3380进入Passky管理界面。

点击界面右上角的"Log in"登录按钮,使用.env文件中配置的管理员账户凭证完成认证后,务必首先切换到"Health"健康状态标签页,全面检查各项服务的运行状态:

如果服务状态指示并非全部显示为绿色(除SSL项目外),则表明系统处于不可用状态,需要仔细检查各项配置参数是否正确设置,并重新启动相关服务。
Windows桌面客户端使用体验
从官方网站下载页面https://passky.org/download获取Windows客户端安装程序,完成安装后启动应用程序:

重要注意事项:此处需要输入的登录账户与浏览器端使用的管理员账户存在本质区别。
- 管理员账户具备系统级管理权限,负责整体用户管理和服务器状态监控
- 客户端登录账户属于普通用户身份,只有此类账户才能创建和管理个人的密码数据记录
因此,在使用客户端之前需要先完成用户注册流程:

关键操作提示:必须首先点击上图红色框标注的选项,切换到自定义服务器模式,这样才能正确连接到自行部署的Passky服务实例。
完成注册并成功登录后,建议先将界面语言切换为中文。值得注意的是,Passky项目存在一个特殊现象:Web管理后台不支持中文界面,但各个客户端应用程序却都提供了完整的中文语言支持。

接下来可以尝试创建第一个密码条目:

添加密码条目的界面设计极为简洁,仅包含网站地址、用户名、密码内容和备注信息四个基本字段,这种设计风格确实显得相当精简。
Passky同时支持从其他密码管理软件导入现有数据,这一功能在实际使用中非常实用:

Chrome浏览器插件安装与使用
通过访问官方网站下载页面,可以直接跳转到Chrome扩展程序安装链接,或者在Chrome网上应用商店中直接搜索Passky进行安装。
浏览器插件启动后的界面布局和视觉风格与Windows桌面客户端完全一致,因此不再赘述详细说明。

Android移动端应用安装与问题处理
移动设备应用程序可以从GitHub发布页面下载:https://github.com/Rabbit-Company/Passky-Android/releases
在手机上安装应用后尝试登录时遇到了错误提示:

Android移动端应用对密码复杂度提出了更为严格的要求!
更加令人困惑的是,当返回到Windows桌面客户端时,竟然无法找到修改账户密码的功能选项,这种设计缺陷确实会影响用户体验。
Passky服务综合评价与使用建议
- 系统不支持指定特定类型的密码格式,也不允许用户添加自定义字段,对于需要管理多个关联密码的银行账户等复杂场景无法提供充分支持
- 缺乏修改用户账户密码的功能选项,不同客户端平台之间的功能规格存在不一致现象
总体而言,这款密码管理解决方案并不推荐广泛使用。由此可见,产品在市场上的相对小众地位确实存在其内在原因。