是否有可能以某种方式设置一个不需要用户名、密码或证书即可登录的 ssh 服务器?如果不可能,如果我向所有客户提供相同的公钥,每个连接是否会单独加密?(即用户 A 无法解密用户 B 连接的有效负载)
我希望提供对单个程序的访问权限,该程序将提示输入用户名和密码。
但加密是必不可少的,用户必须无法互相窥探
谢谢
答案1
我认为您不能删除 SSH 的身份验证部分,因为您始终需要用户名才能打开会话,但您可以设置一个空白密码并PermitEmptyPasswords
在 sshd 配置中将其设置为是。
但这并不安全,使用密钥身份验证更好。
如果您向客户提供公钥,则意味着他们可以允许您连接到他们的 ssh 服务器,而不是您的。
我认为您希望客户连接到您的 ssh 服务器。在这种情况下,客户需要向您提供他们的公钥,然后您才允许他们连接。如果所有客户都使用相同的公钥连接到您的 ssh 服务器,则意味着所有客户都使用相同的私钥,而这不是一个选择(提供私钥不是您的职责,私钥不应共享)
关于加密和窥探,加密是通过会话密钥而不是公钥/私钥进行的,但要交换会话密钥,ssh 需要使用公钥/私钥。
因此,如果您的所有客户都使用相同的私钥,如果他们从一开始就窥探会话,他们就可以解密会话,如果他们在会话密钥交换后窥探会话,那么解密会话将非常困难。
一篇关于 ssh 如何工作的好文章http://www.eng.cam.ac.uk/help/jpmg/ssh/ssh-detail.html
答案2
虽然有点晚了,但您可以通过在 /etc/passwd 中将用户的 shell 设置为该程序来强制用户在登录时(以任何方式)运行特定程序。我相信在使用 sshd 时使用 .sshrc 文件有一种更复杂的方法,但我并不假设您使用的是 OpenSSH - 不过这一切都在 man 文件中。
答案3
把私钥视为秘密。当你要证明某事时,比如本案中的你的身份,你可以声称你知道一个秘密,在本例中为私有 ssh 密钥。公钥就是:“公开的”,从这个意义上来说,它不能用来证明任何事情。
这与以下建议一致:永远不要给多个用户同一个私钥。大量安全漏洞的产生都是为了减少安全流程的负担。也有安全的方法可以做到这一点。但作为管理员,您必须完成这项工作,否则您的网络及其用户就会自动受到攻击。
“不要走捷径”
答案4
用户将要能够互相监视,因为它们能够访问其他进程的内存空间(假设它们可以运行任意程序)。