![ssh 禁用登录,但允许复制 id](https://linux22.com/image/630379/ssh%20%E7%A6%81%E7%94%A8%E7%99%BB%E5%BD%95%EF%BC%8C%E4%BD%86%E5%85%81%E8%AE%B8%E5%A4%8D%E5%88%B6%20id.png)
我有一个仅用于代理的用户,因此没有人可以登录。
#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
。