我想知道是否有一个工具/修改的 ssh-server/ssh 选项使我能够向给定用户授予单个会话的 ssh 访问权限。我想避免的是为特定来宾创建用户帐户和密码。相反,它可以使用具有某些访问权限的现有用户帐户来设置一次。我不想与我授予访问权限的每个人共享相同的帐户信息。访问权限应该只能工作一次/在给定的时间间隔后超时,或者该工具应该询问我是否检测到访问权限,是否要授予它。这个想法是共享一条线,例如
ssh tempuser001@host
其中tempuser001
告诉服务器谁尝试访问但不对应于真实用户。用户可以使用他的临时权限通过 ssh 连接来完成所有你可以做的奇特的事情,比如scp
、rsync
、以及任何通过隧道工作的事情,比如vnc
、 ... 其灵感来自 teamviewer,这是一种允许远程用户一旦我与他共享了 ID,就可以访问我的桌面。
答案1
一种解决方案是使用 ssh 密钥。
您可以指定每当使用特定 ssh 密钥登录服务器时运行的命令。通过将其与简单的登录脚本相结合,您可以获得所需的任何访问控制。
这是我编写的一个简单示例,它授予在特定日期之前的访问权限。
将用户的ssh添加到目标用户的authorized_keys
文件中。在此示例中,我添加了用户不应再具有访问权限的日期。
〜/.ssh/authorized_keys
command="/etc/ssh/access.sh 2013-04-05" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDc7nKsHpuC6WW8sBbf1j0snelmBsPAN5GQdJ86sJCyCsDzykvB2i2anLS/U131p0yDf0bU8W8kdsLE9pHQ5NLWlxlyWmFxdKujg4B+WxyHFKO0PHKfQhXEwMrYE4m9QwGYtsQrrWXBg4vQwUvOQDA4cNhdvNrIf/V+BGcdWtCXO/JGy7vkyKLd8LLHcZGsG3Pq5trHAKHaWkQgBN8P+atIX3FbwwQl4Ja020P7LW0ddPuUJxltOS11ZjdsG04s/xpL6JX3xi9FdDpO13SkQ5cqD0GIFkI+CLksqGYvvvpC7/22Rl4hc3nAcOIiwekylSB5rpU4LawF1IxCk0sg0BGr
并创建要执行的登录脚本。
/etc/ssh/access.sh
#!/bin/bash
until="$1"
if (( $(date --date="$until" +%s) < $(date +%s) )); then
echo "Your login has expired"
exit
fi
exec ${SSH_ORIGINAL_COMMAND:--a -${SHELL##*/} $SHELL}
chmod a+x /etc/ssh/access.sh
(创建后别忘了)
访问权限过期后,它将如下所示
PROMPT # ssh localhost
Your login has expired
Connection to localhost closed.
PROMPT #
答案2
是除了 S/Key 之外,Linux 上还有真正的一次性密码 (OTP)吗?(特别是 S/Key、OPIE 和OTPW)有帮助吗?