在 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 密钥。