授予单个会话的 ssh 访问权限

授予单个会话的 ssh 访问权限

我想知道是否有一个工具/修改的 ssh-server/ssh 选项使我能够向给定用户授予单个会话的 ssh 访问权限。我想避免的是为特定来宾创建用户帐户和密码。相反,它可以使用具有某些访问权限的现有用户帐户来设置一次。我不想与我授予访问权限的每个人共享相同的帐户信息。访问权限应该只能工作一次/在给定的时间间隔后超时,或者该工具应该询问我是否检测到访问权限,是否要授予它。这个想法是共享一条线,例如

ssh tempuser001@host

其中tempuser001告诉服务器谁尝试访问但不对应于真实用户。用户可以使用他的临时权限通过 ssh 连接来完成所有你可以做的奇特的事情,比如scprsync、以及任何通过隧道工作的事情,比如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)有帮助吗?

相关内容