bash判断ssh -Tgit@GitHub是否成功,不要看 ssh 的退出码,而要看输出内容
2026/6/20 22:30:44
网站建设
项目流程
“ 判断 GitHub SSH 成功与否,永远不要看 ssh 的退出码,而要看输出内容” , 这句话基本正确 ,尤其是针对 GitHub 推荐的 SSH 测试命令ssh -T git@github.com。
GitHub 官方文档明确指出:成功认证后,该命令会输出类似“Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.” 的消息,同时退出码(exit code)为 1 (而非传统的 0 表示成功)。 这是因为 GitHub 故意拒绝提供 shell 访问(它打印欢迎消息后立即退出),导致退出码为 1。 如果认证失败 (如密钥不对、未添加等),通常退出码为 255,并输出 “Permission denied (publickey)” 等错误。 因此,单纯检查退出码是否为 0 会误判:成功时是 1,看起来像“失败”。 实际判断建议 优先看输出内容 :看到 “You’ve successfully authenticated” 就表示 SSH 密钥认证成功。如果想在脚本中自动化检查退出码,可以这样处理(常见做法):成功:退出码 == 1 失败:退出码 == 255(或其他非 1 的值) 示例 Bash 函数(来自社区常见实现):
ssh -T git@github.com> /dev/null2 >&1 if [ $? -eq1 ] ; then echo "SSH 认证成功" else echo "SSH 认证失败" fi 总之,这句话的“永远不要看 ssh 的退出码”有点绝对(脚本中还是要看的,但要看具体值),但核心意思是对的:别指望退出码 0 表示成功,主要靠输出内容确认 。这也是 GitHub 的特殊设计造成的。``