尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux命令-ssh-agent(启动 SSH 认证代理)

Linux命令-ssh-agent(启动 SSH 认证代理) Linux命令-ssh-agent启动 SSH 认证代理快速参考启动 ssh-agent完整工作流程环境变量SSH Agent 转发-A 选项持久化 ssh-agent实用脚本安全最佳实践ssh-agent是一个后台程序用于缓存 SSH 解密的私钥。用户只需输入一次私钥密码后续在整个会话期间的 SSH 连接都将自动使用缓存的密钥无需重复输入密码。它是 SSH 密钥认证体系中的核心组件广泛应用于开发、运维和自动化脚本中。快速参考eval$(ssh-agent)ssh-agent[选项][命令]ssh-agent不直接与用户交互——它通过 Unix 域套接字$SSH_AUTH_SOCK与ssh、ssh-add等客户端通信。启动 ssh-agent# 标准启动方式在 Shell 中执行eval$(ssh-agent)# 指定套接字绑定位置ssh-agent-a/tmp/my_custom_agent.sockeval$(ssh-agent-a/tmp/custom_agent.sock)# 启动并设置超时生存时间ssh-agent-t3600# 3600 秒后 agent 自动退出# 调试模式查看详细输出ssh-agent-d# 以某个命令启动 agent命令结束后 agent 退出ssh-agentbashssh-agent tmux ssh-agentsshuserhost完整工作流程# Step 1: 启动 ssh-agenteval$(ssh-agent)# 输出类似# Agent pid 12345# Step 2: 添加私钥会提示输入密钥密码ssh-add ~/.ssh/id_ed25519# Enter passphrase for /home/user/.ssh/id_ed25519:# Identity added# Step 3: 确认密钥已加载ssh-add-l# 256 SHA256:xxxxx userhost (ED25519)# Step 4: 免密登录sshuserremote_host# 无需再次输入密码# Step 5: 会话结束后停止 agentssh-agent-k# 或者直接退出终端环境变量ssh-agent设置两个关键环境变量# SSH_AUTH_SOCK - agent 通信的套接字路径echo$SSH_AUTH_SOCK# /tmp/ssh-xxxxx/agent.12345# SSH_AGENT_PID - agent 进程 PIDecho$SSH_AGENT_PID# 12345# 查看 agent 是否在运行ps-p$SSH_AGENT_PID2/dev/nullechoAgent 运行中||echoAgent 已停止# 验证 agent 通信SSH_AUTH_SOCK$SSH_AUTH_SOCKssh-add-lSSH Agent 转发-A 选项Agent 转发允许在远程服务器上使用本地的密钥# 启用 Agent 转发连接远程主机ssh-Auserjumphost# 在跳板机上可以看到本地无密钥ssh-add-l# 256 SHA256:xxxxx (ED25519) ← 这是本地的密钥# 从跳板机免密连接到目标服务器sshuserinternal_server# 使用本地缓存的密钥认证# 多跳场景ssh-Auserhop1# 在 hop1 上继续转发ssh-Auserhop2# 在 hop2 上继续sshusertarget# 仍然使用本地密钥# ⚠️ 安全提醒不要在不受信的主机上使用 Agent 转发# 因为该主机的 root 用户可以 hijack 你的 agent 套接字持久化 ssh-agent# 方法 1: 使用 keychain 工具sudoapt-getinstallkeychain# Debian/Ubuntu# 添加到 ~/.bashrceval$(keychain--eval--quietid_ed25519)# 方法 2: .bashrc 自动检测并重用 agent# 添加到 ~/.bashrcif[-z$SSH_AUTH_SOCK];then# 检查是否有运行中的 agentSSH_AUTH_SOCK$(find/tmp/ssh-*-nameagent.*-user$USER2/dev/null|head-1)if[-n$SSH_AUTH_SOCK];thenexportSSH_AUTH_SOCKSSH_AGENT_PID$(echo$SSH_AUTH_SOCK|grep-oP\d$)exportSSH_AGENT_PIDelseeval$(ssh-agent)fifi# 方法 3: systemd 用户服务推荐 Linux 桌面用户# 创建 ~/.config/systemd/user/ssh-agent.servicecat~/.config/systemd/user/ssh-agent.serviceEOF [Unit] DescriptionSSH authentication agent [Service] Typeforking EnvironmentSSH_AUTH_SOCK%t/ssh-agent.socket ExecStart/usr/bin/ssh-agent -a $SSH_AUTH_SOCK ExecStartPost/bin/bash -c echo SSH_AUTH_SOCK$SSH_AUTH_SOCK [Install] WantedBydefault.target EOFsystemctl--userenable--nowssh-agent.service实用脚本# 一键启动 agent 并加载所有密钥init_ssh_agent(){if[-z$SSH_AUTH_SOCK];theneval$(ssh-agent-s)echossh-agent 已启动 (PID:$SSH_AGENT_PID)elseechossh-agent 已在运行 (PID:$SSH_AGENT_PID)fi# 加载所有私钥forkeyin~/.ssh/id_*;doif[[$key!*.pub]][[-f$key]];thenssh-add$key2/dev/nullfidone# 显示加载状态echo已加载密钥数:$(ssh-add-l2/dev/null|wc-l)}# 安全终止所有 SSH agentkill_all_agents(){pkillssh-agentunsetSSH_AUTH_SOCKunsetSSH_AGENT_PIDecho所有 ssh-agent 进程已终止}# 检查 agent 中密钥是否即将过期check_agent_ttl(){ssh-add-l-v2/dev/null|whileread-rline;doecho$linedone}# CI/CD 环境中的非交互式使用# 准备环境eval$(ssh-agent-s)# 从环境变量读取密钥不提示密码echo$SSH_PRIVATE_KEY|ssh-add -/dev/null21# 或者ssh-add -$SSH_PRIVATE_KEY# 验证ssh-oStrictHostKeyCheckingno userdeploy_serveruptime# 清理ssh-agent-k安全最佳实践重要不要在不信任的主机上使用 Agent 转发-A服务器 root 可窃取你的代理套接字使用密钥密码passphrase——即使私钥泄露攻击者仍需密码才能使用设置 agent 超时——ssh-agent -t 3600或ssh-add -t 1800限制暴露窗口离开终端时锁定 agent——ssh-add -x定期检查已加载的密钥——ssh-add -l# 确认只有必要的密钥被加载ssh-add-l|whileread-rsize fingerprinttype;doecho类型:$typeecho指纹:$fingerprintecho---donessh-agent是 SSH 生态系统的基石之一它在安全性与便利性之间提供了优雅的平衡。掌握 Agent 转发和生命周期管理是每个 Linux 运维和开发者的必备技能。
返回列表