Mac 自动加载sshkey
在 Zsh 中自动运行 ssh-add
以便在登录时自动添加 SSH 密钥,可以在 ~/.zshrc
文件中添加相关配置。下面是一个示例,展示如何在 Zsh 会话启动时自动运行 ssh-add
并添加所有默认位置的 SSH 密钥。
步骤:
- 编辑
~/.zshrc
文件:
打开 ~/.zshrc
文件:
vi ~/.zshrc
- 添加以下内容到
~/.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 密钥。
- 重新加载
~/.zshrc
文件:
source ~/.zshrc
检查 $SSH_AUTH_SOCK
是为了避免在已经运行的 ssh-agent
会话中启动新的 ssh-agent
实例。$SSH_AUTH_SOCK
是环境变量,它存储了 ssh-agent
创建的 UNIX 域套接字的路径。如果该变量已经存在,说明 ssh-agent
已经在运行,并且可以直接使用。
以下是详细的解释和更新后的脚本:
原理
- 检查
$SSH_AUTH_SOCK
: - 如果
$SSH_AUTH_SOCK
为空,说明当前会话没有运行ssh-agent
。 -
如果
$SSH_AUTH_SOCK
不为空,说明ssh-agent
已经运行,可以直接使用。 -
启动
ssh-agent
: -
当
$SSH_AUTH_SOCK
为空时,启动新的ssh-agent
实例,并设置环境变量。 -
运行
ssh-add
: - 使用
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 密钥。