Mac 自动加载sshkey

邱秋 • 2024年08月01日 • 阅读:151 • mac ssh

在 Zsh 中自动运行 ssh-add 以便在登录时自动添加 SSH 密钥,可以在 ~/.zshrc 文件中添加相关配置。下面是一个示例,展示如何在 Zsh 会话启动时自动运行 ssh-add 并添加所有默认位置的 SSH 密钥。

步骤:

  1. 编辑 ~/.zshrc 文件

打开 ~/.zshrc 文件:

vi ~/.zshrc
  1. 添加以下内容到 ~/.zshrc
# ~/.zshrc

# 自动运行 ssh-agent 并添加 SSH 密钥
function start_ssh_agent {
    if [ -z "$SSH_AUTH_SOCK" ]; then
        echo "Starting ssh-agent..."
        eval $(ssh-agent -s)
        ssh-add ~/.ssh/my_rsa
    else
        echo "ssh-agent already running."
    fi
}

# 在 zsh 启动时调用 start_ssh_agent
start_ssh_agent

这段脚本会在 Zsh 启动时检查 SSH_AUTH_SOCK 变量是否为空,如果为空则启动 ssh-agent 并运行 ssh-add 来添加所有默认位置的 SSH 密钥。

  1. 重新加载 ~/.zshrc 文件
source ~/.zshrc

检查 $SSH_AUTH_SOCK 是为了避免在已经运行的 ssh-agent 会话中启动新的 ssh-agent 实例。$SSH_AUTH_SOCK 是环境变量,它存储了 ssh-agent 创建的 UNIX 域套接字的路径。如果该变量已经存在,说明 ssh-agent 已经在运行,并且可以直接使用。

以下是详细的解释和更新后的脚本:

原理

  1. 检查 $SSH_AUTH_SOCK
  2. 如果 $SSH_AUTH_SOCK 为空,说明当前会话没有运行 ssh-agent
  3. 如果 $SSH_AUTH_SOCK 不为空,说明 ssh-agent 已经运行,可以直接使用。

  4. 启动 ssh-agent

  5. $SSH_AUTH_SOCK 为空时,启动新的 ssh-agent 实例,并设置环境变量。

  6. 运行 ssh-add

  7. 使用 ssh-add 添加 SSH 密钥到 ssh-agent

解释

  • if [ -z "$SSH_AUTH_SOCK" ]; then ... fi:检查 $SSH_AUTH_SOCK 是否为空。如果为空,则表示 ssh-agent 未运行。
  • eval $(ssh-agent -s):启动 ssh-agent 并将其环境变量导出到当前 shell 会话。
  • ssh-add:添加默认位置的 SSH 密钥。
  • echo "ssh-agent already running.":如果 ssh-agent 已经在运行,则提示用户。

通过这种方式,你可以确保在每次启动 Zsh 会话时,只有在没有运行 ssh-agent 的情况下才会启动新的 ssh-agent 实例,并添加 SSH 密钥。

我,秦始皇,打钱!