opkssh 是一个将 OpenID Connect (OIDC) 单点登录(SSO)与 SSH 协议集成的开源工具。
它通过 OpenID 身份验证来生成 SSH 密钥,使用户免去管理多个 SSH 密钥的烦恼。
文中以 Authentik 举例,演示 OIDC 身份验证平台如何对接 opkssh
1.在 Authentik 上配置 opkssh认证程序
打开 Authentik 管理员界面,侧边栏点击 应用程序 -> 应用程序 -> 以提供程序创建

依次设置好 应用程序 和 提供程序,
提供程序类型选择 OAuth2/OpenID Provider,
记录好 应用Slug、客户端 ID 和 客户端 Secret(待会要用),提供程序的重定向 URI设置为以下三行:
重定向 URI
匹配类型 | URI
strict: http://localhost:3000/login-callback
strict: http://localhost:10001/login-callback
strict: http://localhost:11110/login-callback


2.在 Linux 远程服务器上安装 opkssh
# 运行简易配置脚本来安装opkssh
wget -qO- "https://raw.githubusercontent.com/openpubkey/opkssh/main/scripts/install-linux.sh" | sudo bash
为什么不在Releases那里直接安装软件包?
1. 需要手动创建 opksshuser 用户
2. 需要手动为 /etc/opk 里的文件设置 640权限
3. 需要手动重启sshd
在 Linux 远程服务器上安装好 opkssh(服务器端)之后,依次进行以下操作:
# “https://authentik.company/application/o/<slug>/”为你的 Authentik域名,请自行替换
# /<slug>/这里的 '/' 不要删
# 设置provider (这里的 24h 指的是 一次 SSH 密钥的有效时间)
echo 'https://authentik.company/application/o/<slug>/ <客户端ID> 24h' > /etc/opk/providers
# 设置auth_id(允许谁以谁的身份登录)
# 这里有两种设置方法
# 允许单个用户使用 opkssh 登录(例如 [email protected] 使用服务器的 root 身份登录)
sudo opkssh add root [email protected] https://authentik.company/application/o/<slug>/
# 允许Authentik里设置的某个用户组使用 opkssh 登录(例如 ssh-users)
sudo opkssh add root oidc:groups:ssh-users https://authentik.company/application/o/<slug>/
3. 安装 opkssh 客户端
opkssh 支持在 Windows、macOS、Linux 和 Android系统上使用,其中的Android端通过 Termux App来使用:
在 Windows 上安装 opkssh
1. 键盘敲击 Win+S 按键,搜索 PowerShell 并打开
2. 在终端模执行以下命令,安装 opkssh
winget install openpubkey.opkssh
3. 安装完成后,在 C:\Users\{USER}\.opk\config.yml 写入配置文件
在 Linux 上安装 opkssh
1.在终端模执行以下命令,安装 opkssh
# 如果是 x86-64
curl -L https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-linux-amd64 -o opkssh; chmod +x opkssh
# 如果是 arm64
curl -L https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-linux-arm64 -o opkssh; chmod +x opkssh
2. 安装完成后,在 ~/.opk/config.yml 写入配置文件
config.yml配置文件示例:
---
default_provider: webchooser
providers:
- alias: "Authentik"
issuer: https://authentik.company/application/o/<slug>/
client_id: <客户端 ID>
client_secret: <客户端 Secret>
scopes: openid email profile
access_type: offline
prompt: consent
redirect_uris:
- http://localhost:3000/login-callback
- http://localhost:10001/login-callback
- http://localhost:11110/login-callback
使用 opkssh :
在 终端模 里依次执行以下命令:
opkssh login
ssh user@hostname
即可开始使用
