让我的受密码保护的SSH密钥在一段时间后过期或超时


12

我有一个用于身份验证的专用SSH密钥,存储在〜/ .ssh / id_rsa中。当我进入服务器时,系统会提示我输入密码以解锁密钥:

在此处输入图片说明

我喜欢这个。我也喜欢我可以一次又一次地SSH,它不会提示我输入密码。

我不喜欢的是,几天甚至几周后都不需要输入密钥密码。我可以锁定屏幕或使其进入睡眠状态,但仍然无需输入密钥密码。密码似乎唯一过期的时间是我注销时(我很少这样做)。

如何使密钥密码在一段时间后过期,从而迫使我再次输入密码进行身份验证?这样一来,可能会在1小时后自动忘记密钥。

Answers:


4

我强烈建议您仅更改默认(登录)钥匙串上的设置,而不是调整ssh-agent(现在需要笨拙的黑客攻击)。我使用非常有帮助的“锁定睡眠”以及“ 4小时后锁定”,因为除非我真的很熟,否则我不希望出现提示。

打开“钥匙串访问”,然后右键单击登录钥匙串以更改设置: 钥匙串安全设置

或者,如果您更喜欢命令行:

security set-keychain-settings -lu -t 14400

这将导致至少一个额外的提示,提示您解锁钥匙串本身(需要您的登录密码),以及提示您要使用的任何钥匙...但是,它比禁用系统完整性保护IMO更有效。


对我来说,这不是El Capitan的选项,并且命令行命令似乎没有任何区别,您知道El Capitan中是否有类似的选项?
伊恩

1
可以肯定的是,我能够在El Cap上做到这一点-我刚刚检查了一下,两种方法(UI和cmdline)在Sierra上当然仍然可以使用。但是,我只能在登录钥匙串上进行操作,而不能在System或iCloud上进行操作。
戴夫·格里高利

9

注意:在较新版本的OS X中,必须禁用系统完整性保护才能使此答案起作用。(感谢@Dave Gregory和@Jaap指出了这一点。)

在文本编辑器中打开/System/Library/LaunchAgents/com.openssh.ssh-agent.plist(在旧版本org.openbsd.ssh-agent.plist中:)。更换:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
</array>

与:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
    <string>-t</string>
    <string>30m</string>
</array>

这将在30分钟后使密钥失效。

重启。等待,重启?!?这不是Windows!是的,重新启动。

好吧,您可以尝试解密有关即时更改设置的说明,但是祝您好运。


1
像我这样的学徒可以将“ 1800”替换为“ 30m”,因为它使阅读起来更加容易。有关完整格式,请参见sshd_config(8)中的“时间格式”。
Tony Williams

@托尼·威廉姆斯酷!已修正
Michael Kropat 2014年

在优胜美地看来,这似乎对我不起作用;还有谁?
Dave Gregory

我在优胜美地上找到了一种不涉及禁用系统完整性保护的变通办法;添加为下面的答案。
Dave Gregory

1
感谢您提供@Jaap的信息。我目前不每天使用OS-X,因此我无法亲自验证任何内容,但是为了成为本次问答的好管理员,我根据您的信息更新了我的答案,并将接受的答案更改为Dave Gregory的因为在许多情况下禁用系统完整性保护似乎是不可取的。
Michael Kropat

7

您需要设置密钥的寿命。通常它默认为永远。

运行时,ssh-add您想使用该-t选项。如果您想要一小时的关键寿命,那就是ssh-add -t 1h。时间格式可以在sshd_config手册页中看到,但简单地说,它们是数字,后跟s,m,h,d或w,表示秒,分钟,小时,天或周。

ssh-add可以放到您的.bashrc文件中,它只会要求您验证一次密钥。即使密钥“过期”也不会被删除-尝试使用它时,它只会再次要求输入密码。

另一个选择是更改ssh-agent存储在其中的启动选项并在其中/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist添加启动选项-t。(我LaunchControl用于更改这些内容,但是如果您小心的话,可以手动进行。)


我宁愿不必记得每次运行ssh-addssh都要手动运行。这很有趣,但是我真的在寻找自动的东西。
Michael Kropat 2014年

+1感谢您为我指出org.openbsd.ssh-agent.plist解决方案
Michael Kropat 2014年

1

另一种解决方案是:

ssh-add -t <time> <ssh-private-key>  # Set maximum lifetime to your SSH priv key.
killall ssh-agent                    # Kill all ssh-agent processes.
ssh-add -D                           # Delete all identities recorded by the agent.

使用此解决方案,您不必为所有钥匙串选择超时-当您想要为私钥密码记录设置几秒钟的超时时就很烦恼-并且不必禁用SIP来编辑/ System /库/LaunchAgents/org.openbsd.ssh-agent.plist。

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.