GitLab CI部署时SCP权限问题求助:可SSH连接但无法传文件
GitLab CI SCP文件传输失败排查与解决
核心问题分析
从SCP的调试日志能看到,命令尝试使用/root/.ssh/id_rsa等默认路径的密钥,完全没加载你指定的$ID_RSA密钥。原因是SCP参数顺序错误:所有选项参数(如-i、-o)必须放在源文件路径之前,否则SCP会把后续选项当成文件路径处理,直接忽略密钥指定。
你的原SCP命令:
scp -v -o UserKnownHostsFile=./known_hosts ./docker-compose.prod.yml -i $ID_RSA $SERVER_USER@$SERVER_IP:/home/$SERVER_USER
这里-i $ID_RSA被放在了源文件之后,导致SCP无法识别该选项,只能尝试默认密钥,最终因认证失败报错。
修正后的命令
调整参数顺序,将-i $ID_RSA移到选项区域、源文件之前:
scp -v -i $ID_RSA -o UserKnownHostsFile=./known_hosts ./docker-compose.prod.yml $SERVER_USER@$SERVER_IP:/home/$SERVER_USER
该格式和你之前成功的SSH命令参数顺序一致,SCP会正确加载指定私钥完成认证。
额外验证点
如果修正后仍有问题,可检查以下内容:
- 确认
$ID_RSA变量指向正确的私钥文件路径,且已通过chmod og= $ID_RSA将权限设置为600(SSH会拒绝权限过宽的私钥) - 确认目标服务器
/home/$SERVER_USER目录对$SERVER_USER有写入权限 - 可在SCP命令前添加
echo $ID_RSA,验证变量值是否符合预期
内容的提问来源于stack exchange,提问作者Eidechse 94
相关产品推荐
相关产品推荐

