ssh 禁用登录,但允许复制 id

ssh 禁用登录,但允许复制 id

我有一个仅用于代理的用户,因此没有人可以登录。

#passwd file entry
proxyuser:x:996:99::/home/proxyuser:/bin/false

但我想为该用户启用 ssh-copy-id

我该怎么做?我需要自定义 shell 吗?

答案1

大多数系统上ssh-copy-id都有一个简单的 shell 脚本,它在运行 ssh 客户端软件的系统上创建本地 id 列表,使用 ssh 连接到远程系统,要求用户进行身份验证,然后将 id 复制到authorized_keys远程系统上的文件中。

脚本的最后一部分至少在openssh-6.4p1我的 Fedora 20 系统上是这样的:

printf '%s\n' "$NEW_IDS" | ssh "$@" "
            umask 077 ;
            mkdir -p .ssh && cat >> .ssh/authorized_keys || exit 1 ;
            if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi" \
  || exit 1

因此,要ssh-copy-id工作,您需要一个受限制的远程 shell,它不仅允许您指定用户可以运行的命令,还允许您指定他/她可以访问的文件(使用输出重定向)。我不知道有任何受限制的 shell 允许这样的自定义。

答案2

通常我会建议使用指定命令~/.ssh/authorized_keys,但是当目的是支持时,这没有多大意义ssh-copy-id

自定义 shell 可能有用,但可能有点过头了。另一个值得研究的替代方法是使用文件~/.ssh/rc,该文件将在用户 shell 之前运行。

无论采用哪种方法,您都需要确保不会打开任何不必要的访问。您需要验证的三种情况是

  • 正常 ssh 登录将启动登录 shell。
  • 登录后将执行单个命令。
  • 使用-N该登录根本不运行任何命令,但允许端口转发。

如果上述三项中有一项您不想允许,您应该通过使用密码或稍后使用 安装的密钥来验证您想要的解决方案不允许它ssh-copy-id

相关内容