我正在尝试使用sshd_config的AuthorizedKeysCommand授权SSH会话。 由于某种原因,即使SSHstream至less启动了AuthorizedKeysCommandstream, AuthorizedKeysCommand也没有得到执行。
以下是我的/etc/ssh/sshd_config AuthorizedKeysCommandconfiguration:
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来解决这个问题。
我的configuration如下:操作系统: Ubuntu 16.04.1 LTS (所有最新的补丁和更新来自apt(ubuntu)仓库)OpenSSH Server: OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g 1 Mar 2016
我可能在这里做错了什么?
sshd_config手册页相当清楚地表明了命令要做的和输出的内容:
AuthorizedKeysCommand指定用于查找用户公钥的程序。 该程序必须由root拥有,不能被组或其他人写入,并由绝对path指定。
对AuthorizedKeysCommand的参数可以使用以下令牌来提供,这些令牌在运行时将被扩展:%%被字面值'%'replace,%u被用户名被authenticationreplace,%h被用户的主目录replace通过authentication,将%treplace为提供authentication的密钥types,将%freplace为密钥的指纹,并将%kreplace为提供authentication的密钥。 如果没有指定参数,则会提供目标用户的用户名。
程序应该在标准输出上生成zero或者更多行的
authorized_keys输出 (参见sshd(8)AUTHORIZED_KEYS )。 如果AuthorizedKeysCommand提供的密钥没有成功authentication和授权用户,则公钥authentication继续使用通常的AuthorizedKeysFile文件。 默认情况下,没有运行AuthorizedKeysCommand。
所以,是的,你试图写在你的命令的date和echo很可能被忽略为垃圾/无效的输出。 如果你想要授权你的用户,你需要一个脚本来产生预期格式的公钥(更多信息参见sshd手册页)。