Linux ssh:允许公钥身份验证,而无需授予用户对私钥的读取权限


14

在我的Linux服务器上登录的用户应该能够使用默认帐户ssh到特定的远程计算机。远程计算机上的身份验证使用公钥,因此在服务器上相应的私钥可用。

我不希望服务器用户实际能够读取私钥。基本上,他们可以访问服务器这一事实使他们拥有ssh权限,并且从服务器中删除它们也应该禁止连接到远程计算机。

如何允许用户打开ssh连接而不授予他们对私钥的读取权限?

到目前为止,我的想法是:显然ssh可执行文件必须能够读取私钥,因此它必须在具有这些权限的服务器上的另一个用户下运行。一旦建立了ssh连接,我就可以将其“转发”给用户,以便他可以输入命令并与远程计算机进行交互。

  • 这是一个好方法吗?
  • 我应该如何实施前锋?
  • 用户如何启动连接(即对密钥具有读取权限的用户执行ssh)?
  • 有安全漏洞吗?-如果用户可以像其他用户一样执行ssh,那么他们可以做其他用户可以做的所有事情(包括读取私钥)吗?


1
将远程服务器配置为仅从服务器的IP接受与该密钥的连接?这样,即使他们偷了钥匙,他们也无能为力。

@AndréDaniel也许他们可以登录到另一台完全不相关的计算机,该计算机还配置为接受来自服务器的无密码登录。这是我想到具有这样的设置的唯一原因。如果不是那样的话,我很好奇它是什么。(没关系,真的。)
David Z

@DavidZ我不太了解...该密钥在任何地方都不应被信任,而是在目标服务器上,假设IP与第一台服务器(用户连接到的服务器)匹配。

2
如果您需要以这种方式将其锁定,我认为您已采取措施禁止用户向~/.ssh/authorized_keys文件添加新的公钥?
mpontillo 2014年

Answers:


31

这是sudo存在的原因之一。只需让您的用户仅使用预授权的命令行选项运行一个命令,就可以解决最明显的问题。例如

#/etc/sudoers
%users ALL = (some_uid) NOPASSWD: /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

进行设置,sudo以便该组的所有成员在users运行时都可以以some_uid用户身份运行ssh命令,而无需输入自己的密码(或some_uid帐户的密码):

sudo -u some_uid /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

删除NOPASSWD:强制用户在登录到远程主机之前输入自己的密码的选项。
可能是为了方便用户而设置别名或包装脚本,因为sudo对于使用正确的参数非常挑剔。


奇迹般有效。对于wenzul提到的重复项,这也应该是推荐的答案。
菲利普2014年

10

这似乎是基于主机的身份验证的好用例。这是一种身份验证方法,其中SSH不使用本地计算机(在本例中为服务器)上的单个用户密钥进行身份验证;而是使用主机的私钥,该私钥存储在中/etc/ssh/,并且只能由读取root

要进行此设置,您需要.shosts在希望人们登录的用户的主目录中(不是~/.ssh)在远程计算机上创建一个名为的文件。该文件应具有内容

server-hostname +

server-hostname服务器的名称在哪里,+是文字加号,用作通配符,表示“任何用户”。

您还需要确保远程计算机可以验证服务器的主机密钥,这意味着服务器的主机密钥需要在远程计算机中/etc/ssh/ssh_known_hosts~/.ssh/known_hosts在远程计算机上列出。如果还不是这种情况,则可以通过登录到远程计算机并运行来进行设置

ssh-keyscan server-hostname >> /etc/ssh/ssh_known/hosts

设置完这些步骤后,如果不需要其他任何东西,则可以完全删除服务器上的私钥。(如果这样做,则始终可以将其设置为只能由root或其他人读取。)

您还可以轻松地执行诸如允许或拒绝某些用户访问远程计算机的操作。见手册页sshhosts.equiv详细信息。

此设置的一个问题是,登录到远程计算机的用户可以进行修改.shosts。他们无法做任何事情来允许他们以其他用户身份登录到远程计算机,但是他们可以切断自己或他人对远程计算机的访问。如果这是一个令人担忧的问题,那么您可能只能使“ .shosts可写性” root或“ 可写性” -我不确定这是否可行,但是您可以尝试看看。(sudo由于用户总是可以删除,因此其他方法(例如具有的方法)也面临相同的风险~/.ssh/authorized_keys。)


+1; 我认为,如果用户需要使用除终端以外的SSH功能(例如端口转发,安全复制等),此选项将提供良好的灵活性。即使是备用SSH客户端也可以使用。该sudo选项可能更适合于锁定环境,不过...
mpontillo 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.