AuthorizedKeysCommand 未执行

AuthorizedKeysCommand 未执行

我正在尝试使用AuthorizedKeysCommand中的授权 SSH 会话sshd_config。由于某种原因,AuthorizedKeysCommand即使 SSH 流程至少启动了AuthorizedKeysCommand流程, 也没有执行。

这是AuthorizedKeysCommand我的配置/etc/ssh/sshd_config

AuthorizedKeysCommand /usr/local/src/authorized_keys_command.sh
AuthorizedKeysCommandUser nobody

我将其更改LogLevelDEBUG并在日志中观察到以下内容:

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和很可能被忽略为垃圾/无效输出。如果您希望以此授权您的用户,您需要一个脚本来生成预期格式的公钥(有关更多信息,请参阅手册页)。echosshd

相关内容