在 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
。eval $(ssh-agent -s)
:启动 ssh-agent
并将其环境变量导出到当前 shell 会话。ssh-add
:添加默认位置的 SSH 密钥。echo "ssh-agent already running."
:如果 ssh-agent
已经在运行,则提示用户。通过这种方式,你可以确保在每次启动 Zsh 会话时,只有在没有运行 ssh-agent
的情况下才会启动新的 ssh-agent
实例,并添加 SSH 密钥。