我正在尝试使用AuthorizedKeysCommand
中的授权 SSH 会话sshd_config
。由于某种原因,AuthorizedKeysCommand
即使 SSH 流程至少启动了AuthorizedKeysCommand
流程, 也没有执行。
这是AuthorizedKeysCommand
我的配置/etc/ssh/sshd_config
:
AuthorizedKeysCommand /usr/local/src/authorized_keys_command.sh
AuthorizedKeysCommandUser nobody
我将其更改LogLevel
为DEBUG
并在日志中观察到以下内容:
debug1: temporarily_use_uid: 65534/65534 (e=0/0)
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 65534/65534 (e=0/0)
debug1: restore_uid: 0/0
这意味着 SSH 守护进程切换到用户nobody
,但之后不执行任何操作。
authorized_keys_command.sh
我的脚本中有以下几行:
#!/bin/bash -e
echo "Invoked AuthorizedKeysCommand"
if [ -z "$1" ]; then
echo "No User Specified"
exit 1
fi
echo "Username : $1"
我甚至尝试通过传递/bin/echo
和/bin/date
来调试该问题但AuthorizedKeysCommand
无济于事。
我的配置如下: 操作系统:(Ubuntu 16.04.1 LTS
应用了 apt(ubuntu)存储库中的所有最新补丁和更新) OpenSSH 服务器:OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g 1 Mar 2016
我在这里可能做错了什么?
答案1
手册页sshd_config
清楚地说明了命令需要执行的操作和输出:
AuthorizedKeysCommand
指定用于查找用户公钥的程序。该程序必须由 root 拥有,不能由组或其他人写入,并且由绝对路径指定。
可以使用以下标记来提供 AuthorizedKeysCommand 的参数,这些标记将在运行时扩展:%% 替换为文字“%”,%u 替换为正在验证的用户名,%h 替换为正在验证的用户的主目录,%t 替换为用于验证的密钥类型,%f 替换为密钥的指纹,%k 替换为用于验证的密钥。如果未指定任何参数,则将提供目标用户的用户名。
程序应该在标准输出上产生零行或多行
authorized_keys
输出(看授权密钥中sshd(8)
)。如果 AuthorizedKeysCommand 提供的密钥未能成功验证和授权用户,则公钥验证将继续使用常规 AuthorizedKeysFile 文件。默认情况下,不会运行 AuthorizedKeysCommand。
所以是的,您尝试在命令中写入的date
和很可能被忽略为垃圾/无效输出。如果您希望以此授权您的用户,您需要一个脚本来生成预期格式的公钥(有关更多信息,请参阅手册页)。echo
sshd