如何在 Mac OS X Lion 上使用 SSH 私钥登录而不每次都输入密码?

Jia*_* W. 23 ssh keychain ssh-agent macos

我每天都使用 Mac OS X Lion 并通过 SSH 登录远程主机。尽管我使用 SSH 密钥对进行远程身份验证并且我不需要机动化每个主机的登录短语,但终端要求输入密码来访问我的 SSH 私钥仍然很烦人。

出于安全原因,我认为必须需要一个用于访问 SSH 私钥的密码。有没有办法让终端在启动时只询问一次短语,然后记住它,并在以后的 SSH 会话中自动使用我的私钥?

有一个名为的脚本keychain在 Gentoo Linux 上运行良好。但我从来没有在 Mac OS X Lion 上弄明白。更重要的是,有很多令人生畏的术语,例如ssh-agentssh-add。在阅读了有关这些 SSH 工具包的各种材料并做了一些令人沮丧的实验后,我更加困惑了。

因此,我来​​到了StackExchange,就以下问题寻求一些建议。

  1. 什么是ssh-agentssh-addkeychainKeychain Access.app以及他们如何互相交流?
  2. 如何在登录时输入 SSH 私钥的密码,并在以后创建 SSH 会话时自由使用它?
  3. 呃……怎么了Keychain Access.app?它不像以前那样存储 SSH 短语。

我在这里列出我所做的。希望有关于我错过的步骤的线索。

步骤 1. 在我的 Mac 上创建一个 SSH 密钥对。

$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.
Run Code Online (Sandbox Code Playgroud)

步骤 2. 将我的 SSH 公钥复制到远程主机。举个例子,我把key复制到localhost,Mac。

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase
Run Code Online (Sandbox Code Playgroud)

第 3 步。然后尝试通过 SSH 密钥对身份验证连接到远程主机(此处为 localhost)。

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.
Run Code Online (Sandbox Code Playgroud)

步骤 4. 从远程主机注销并再次尝试连接。该死,终端再次要求输入 SSH 短语。

一个常见问题是“ssh-agent 在您的 Mac 上运行良好吗?”。坦率地说,我不知道这些事情是怎么回事。这里展示一些运行结果。

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent
Run Code Online (Sandbox Code Playgroud)

欢迎任何反馈。谢谢!

Jia*_* W. 13

在解决“问题”的过程中,我GOOGLE了一些相关的主题,并写下有关如何一些笔记ssh-agentssh-addkeychainKeyChain Access.app工作。最终证明这个问题根本不是问题,而是问题全都与我有关,所谓的ssh-login-without-asking-passphrase-every-time在 Mac 上开箱即用。

但是,这个过程让我获得了一些经验。我在这里写下我的笔记,希望它们能帮助那些对这些术语感到困惑的人。

两个密码术语:

  • passphrase 指访问 SSH 私钥时所需的短语。
  • password 指登录 Mac 所需的短语。

现在我可以弄清楚这些工具包是做什么的,也就是 Mac 上的ssh-agent, ssh-add, keychain, Keychain Access.app

  • ssh-agent是无需键入 SSH 密码即可使用 SSH 私钥的关键服务。ssh-agent以这种方式工作。首先,它在主内存中存储或缓存您的 SSH 私钥。然后在此会话的稍后时间,当远程身份验证需要您的 SSH 私有 SSH 密钥时,ssh-agent将在主内存中找到您的私有密钥并将其交给远程进程。要求您输入 SSH 密码的唯一机会是ssh-agent最初添加您的私钥时。
  • ssh-addssh-agent集合的一部分,它有助于管理 .ssh 中的 SSH 密钥ssh-agent。我们使用ssh-add命令在 ssh-agent 的密钥环中列出、添加、删除私钥。然后ssh-addssh-agent服务通信以完成任务。
  • keychain是用于查找ssh-agent服务(如果不存在,则启动一个新服务)并调用ssh-add以添加 SSH 私钥的脚本。keychain有一个简单而直接的想法,在 ssh-agent 通常不会自动启动的 Linux 上运行良好。
  • Keychain Access.app似乎是最复杂的组件。它是 Mac OS X 的通用令牌存储服务。它存储各种令牌,例如密码、证书等,并充当那些请求令牌的应用程序的令牌代理。在我们的 SSH 私钥案例中,它首先抓取访问 SSH 私钥的请求,并弹出一个窗口,要求您将 SSH 密码,它是一种令牌,存储到Keychain Access.app的密钥环中。那么下次当你要使用私钥进行身份验证时,Keychain Access.app再次弹出一个窗口,询问是否授予权限。得到一个大是后,keychain Access.app将您的私钥添加到ssh-agent的存储中。

有两件事值得你注意:

  1. Mac OS X Lionssh-agent在启动时自动启动一个服务,监听/tmp.
  2. Keychain Access.app存储您的 SSH 密码,因此它可以将您的私钥添加到其中ssh-agent而不会打扰您。是的,不需要输入您的 SSH 短语,但需要在第一次创建此条目时输入您的 Mac 帐户的登录密码以授予权限。

因此,总而言之,SSH-login-without-asking-passphrase 应该在 Mac OS X 上开箱即用。


Kut*_*ike 12

ssh-agent是您想要工作的作品,因为它完全符合您的要求。代理作为守护进程运行,当您向其“添加”私钥时,它会记住该密钥并sshd在初始连接期间自动将其提供给远程。(ssh-add只是您运行以手动向 中添加私钥的命令ssh-agent)。

在 OS X 中,从 Leopard 开始,您不必运行ssh-agentssh-add手动运行。当您尝试连接到服务器时,它应该“发生”。每个密钥一次,它会提示您一个 UI 密码对话框,其中(除其他外)将允许您自动将密钥添加到 ,ssh-agent这样您就不会再次收到提示。

这是通过launchd配置侦听$SSH_AUTH_SOCK套接字上的连接并ssh-agent在第一次需要时自动启动来处理的;之后,ssh-agent仅在需要打开新密钥时才提示您输入凭据。

如果这不起作用,请确保您有正确的launchd配置文件:

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因它仍然不适合您,这是手动运行的“旧”方法:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

还有这个应用程序,自从 Leopard 出现后我就停止使用它,但在以前版本的 Mac OS X 中基本上做了同样的事情:

http://www.sshkeychain.org/

  • 谢谢,迈克尔·伊登菲尔德。我弄清楚出了什么问题,现在 ssh-login-without-passphrase 在 Mac OS X Lion 上完美运行。我做了一些愚蠢的事情——我做了一个符号链接 ```~/tmp``` 指向 ```/tmp/``` 并运行一个 cron 作业来清理 ```~/tmp``` 每 2小时,这也删除了 ssh-agent 套接字。哦,伙计,我讨厌自己。 (4认同)

归档时间:

查看次数:

39418 次

最近记录:

11 年,7 月 前