如何从命令行远程访问钥匙串?


23

我在钥匙串中存储了各种密码(例如,用于远程电子邮件服务器的密码)。从命令行,在本地登录时,我可以通过以下方式检索它们:

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<dumps keychain attributes, including password>

但是,在远程运行时(从其他地方插入框中)无法获得结果:

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<nothing printed, to stdout or stderr>

此外,最终命令的返回值(使用-g)为36。

我已经转储set了本地登录的输出,并将其与远程登录进行比较,缺少的环境变量是:

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

我想念什么?我的确SSH_AUTH_SOCK设置为有效值(从返回ssh-agent)。


Answers:


11

在进行调查研究时,我注意到我的钥匙串配置为“在允许访问之前确认”。因此,当我在find-internet-password本地执行带有-g标志的对话框时,我会看到一个对话框,指出安全性想要使用存储在“ smtp”中的机密信息。 gmail.com”。如果单击“允许”,则它起作用;如果单击“拒绝”,则它与ssh情况类似,但失败,返回码为51访问确认对话框

当我通过远程尝试命令时ssh-g立即导致失败,并36显示您正在报告的状态。

我怀疑这是因为,当您ssh进入系统时,系统无法弹出对话框来确认要允许该security命令访问此信息的对话框。

我能得到的命令来工作,而通过连接ssh由本地运行的命令时,首先单击“总是允许”选项。这将更新“钥匙串”中的权限,这样我就不再需要对对话框(甚至是本地)做出响应,这也使它也可以远程工作。

我不知道这是否对您完全有帮助,因为我认为这意味着您将需要抢先授予security程序访问您可能希望远程访问的任何钥匙串项目的权限。可能可以编写脚本来做到这一点?

如果您正在手动尝试此操作,但以后又想撤销此访问权限,则可以转到“钥匙串访问”中的受影响项,选择“ 获取信息”,然后查看“ 访问控制”选项卡。您将在security此处看到一个条目,可以将其删除:访问控制对话框


我做过同样的事情-将“安全性”命令添加到“始终允许访问”列表中(也可以通过在本地发出命令时在弹出的窗口上单击“始终允许”来完成),但是我仍然不能此后远程访问钥匙串项。必须在其他地方更改其他设置,但我找不到它。
以太2015年

1
ahahaha -这实际工作,但一个需要在Keychain改变设置以使它们生效后的新会话登录。万岁!(如果我找到了如何远程更改访问权限的方法,我会在此问题上添加答案,但是现在可以在本地预先设置以便以后进行远程使用。)
Ether

2
另请注意- security unlock-keychain ~/Library/Keychains/login.keychain在尝试使用钥匙串的远程会话中也必须运行。这将提示您输入密码,因此您无法在脚本中输入密码。可能有一些方法无需密码即可实现,但这超出了此问题的范围:)
Ether

有谁知道我是否可以在命令行中输入用于安全性解锁钥匙串的密码?
tofutim

1
@Ether如果钥匙串位于默认/Users/[user]/Library/Keychains/路径中,则可以省略完整路径,而只使用just login.keychain
solgar

5

security -i unlock-keychain

在MacOS 10.13.4 High Sierra中为我工作。

在研究了karthick的解决方案之后,我发现了这一点。-i使该命令具有交互性,并在终端中提示您输入密码。


3

只要安全钥匙串位于默认位置,您就可以运行以下命令将其解锁。它不会提示您输入密码。它是远程工作的。

security unlock-keychain -p "enter password"


欢迎询问不同!我们正在尝试找到最佳答案,这些答案将为您提供最佳答案的支持信息。答案应该是独立的,因此请解释为什么您认为您提供的答案可以解决问题或比其他答案更好。提供链接作为支持信息还可以帮助OP和其他人自己寻找其他信息。有关如何提供优质答案的信息,请参见如何回答。-评论
-fsb
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.