You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么ssh-add返回状态码1,导致我的bash脚本异常退出?

问题原因分析

ssh-add 不带参数运行时,仅会自动加载 ~/.ssh 目录下默认命名的私钥文件,包括 id_rsa、id_ecdsa、id_ed25519、id_dsa 等标准名称的密钥。即使你把密钥放在 ~/.ssh 目录下,只要文件名不符合默认规则,ssh-add 就无法自动识别加载,最终返回状态码1,触发脚本开头-e参数的退出逻辑,导致后续命令无法执行。

除此之外还有两种可能导致返回1的情况:

  • 私钥或者~/.ssh目录权限不符合ssh的安全要求(目录权限需为700,私钥文件权限需为600)
  • 私钥本身损坏、格式错误,或者解密密码输入错误
解决方案

1. 手动指定私钥路径

如果你的密钥是自定义命名的(比如id_rsa_github、cloud_server_rsa这类),直接把完整路径传给ssh-add即可:

# 替换为你实际的私钥文件名
ssh-add ~/.ssh/你的自定义私钥文件名

2. 调试查看具体错误

如果不知道报错原因,可以临时修改ssh-add行的写法,规避-e参数的退出逻辑,打印具体错误和返回码:

ssh-add || echo "ssh-add执行失败,返回码:$?"

运行脚本后即可根据输出的错误信息定位问题。

3. 修复权限问题

如果报错提示权限不正确,执行以下命令修复ssh目录和文件权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
额外注意事项

你脚本中通过eval $(ssh-agent)启动的ssh-agent仅存在于脚本运行的子shell环境中,脚本执行结束后这个agent进程会自动销毁,退出脚本后你在当前终端中无法复用这个agent加载的密钥。如果需要在当前终端会话中使用agent,直接在终端中执行eval $(ssh-agent)后再运行脚本即可。

内容的提问来源于stack exchange,提问作者netstv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:45:05