Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions docs/dev/ssh.md
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,35 @@ sshd 接受 SIGHUP 信号作为重新载入配置文件的方式。`sshd -t` 命
restrict,from="192.0.2.2",command="/usr/bin/rrsync -ro /mnt/lugftp" ssh-rsa ...
```

### 从命令获取 Authorized Keys {#authorized-keys-from-command}

Linux 平台上的 OpenSSH Server 支持在 `sshd_config` 文件中使用 `AuthorizedKeysCommand` 配置项。通过这一配置,SSH 服务器可以从指定命令的输出中读取用于认证的公钥,而不是从 `authorized_keys` 文件中读取。配置方式如下:

```plain
AuthorizedKeysCommand <some program>
AuthorizedKeysCommandUser nobody
```

其中,`<some program>` 会以 `nobody` 用户身份运行,并接收待认证的用户名作为唯一参数。程序需要输出一组候选公钥,其格式与 `authorized_keys` 文件完全一致。下面是一个 `<some program>` 的示例:

```sh
#!/bin/sh

USERNAME="$1" # 用户名从命令行参数传入

exec /usr/bin/curl \
--silent \
--fail \
--show-error \
"SOME_SOURCES/${USERNAME}"
```

借助这一功能,可以从统一的数据源获取公钥,从而确保所有服务器上的公钥保持同步。启用该功能后,可以将 `AuthorizedKeysFile` 设置为 `none`,以禁用基于 `authorized_keys` 文件的公钥认证——**请务必阅读下面的注意事项**。

!!! warning "确保 Authorized Keys 提供程序正常工作"

例如,对于上述 `curl` 命令,如果服务器网络出现故障,或公钥数据源不可用,SSH 服务器将无法获取用于认证的公钥,从而无法完成公钥认证。此时,只能通过其他方式访问服务器并进行修复。

## SSH 证书 {#certificates}

OpenSSH 支持使用证书作为客户端和服务端的身份验证方式,即在正确配置了证书的情况下,客户端无需预先记录服务器的公钥(即加入 `known_hosts` 文件)即可信任 SSH 服务端,而服务端也无需预先记录客户端的公钥(即写入对应用户的 `authorized_keys` 文件)即可确认登录者的身份。使用证书进行 SSH 身份验证有以下好处:
Expand Down
Loading