You need to enable JavaScript to run this app. sshpass远程执行嵌套SCP命令出现Permission denied认证失败排查
优惠活动
大模型
产品
解决方案
定价
更多

sshpass远程执行嵌套SCP命令出现Permission denied认证失败排查

链式跳转SCP跨服务器传输认证失败排查

需求背景

需搭建专用备份服务器归集30份分散在不同路径的业务文件,支持逐文件单独传输访问,目前在家庭测试环境开展预部署验证,遇到链式传输认证异常,已连续排查4天未定位根因。

已完成的基础配置

  • 两台参与传输的服务器(test-server、linuxproject)之间已完成SSH密钥对生成、公钥互传的全流程配置
  • 测试阶段已按要求放宽权限:业务文件目录最高设为760权限,.ssh专属目录设为0770权限,两台服务器同步完成权限配置
  • 全程未引入Kerberos或GSSAPI类认证依赖,仅使用原生SCP功能开展传输测试

异常表现

  • 单步直连场景功能正常:手动登录test-server主机,直接执行SCP命令向linuxproject传输文件,全流程可正常完成
  • 链式跳转场景认证失败:从当前工作主机通过sshpass远程登录test-server后,链式触发SCP传输任务时出现认证报错
  • 链式场景下基础命令执行无异常:远程触发的touch longlist.txt等前置命令可正常在test-server执行,仅test-server向linuxproject发起的二次SSH连接环节认证失败

复现命令

[linuxproject@sysadmin ~]$ sshpass -p "abc12345" ssh test-server@192.168.1.26 " touch longlist.txt && scp longlist.txt linuxproject@192.168.1.18:/home/linuxproject"

报错日志输出

Permission denied, please try again.
Permission denied, please try again.
linuxproject@192.168.1.18: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
lost connection

调试日志定位的流程异常

从SCP的-v级别verbose日志可见,链式场景下test-server向linuxproject发起SSH连接时,所有认证分支均失败:

  • GSSAPI认证阶段:无可用Kerberos凭据,流程直接中断
  • 公钥认证阶段:客户端本地提供的SSH密钥被linuxproject目标服务器拒绝
  • 密码认证阶段:非交互执行模式下无法打开/dev/tty输入密码,多次重试后连接中断

核心根因

非交互SSH会话的环境路径偏差问题:
手动交互式登录test-server时,shell会依次加载.bash_profile、.bashrc里的自定义环境变量——很多用户会在这些文件里调整HOME路径、或者修改SSH客户端的默认密钥查找目录,这种场景下SCP可以正常定位到预先存放的私钥文件,完成公钥认证。
但当使用sshpass做非交互远程命令执行时,SSH进程不会加载这些用户级shell配置,会使用系统默认的路径规则查找私钥;如果默认路径下没有匹配的私钥文件,公钥认证就会被目标服务器拒绝,此时流程回退到密码认证分支,又因为非交互模式没有分配伪tty,没法打开/dev/tty接收密码输入,最终多次重试后连接中断。

可落地解决方案

  • 方案1:在SCP命令中显式指定私钥路径,绕开默认路径查找逻辑
    远程执行命令调整为:sshpass -p "abc12345" ssh test-server@192.168.1.26 "touch longlist.txt && scp -i /home/test-server/.ssh/id_rsa longlist.txt linuxproject@192.168.1.18:/home/linuxproject"
  • 方案2:给SSH远程连接强制分配伪终端,让非交互会话可以正常加载用户环境变量
    原命令增加-t参数强制分配tty:sshpass -p "abc12345" ssh -t test-server@192.168.1.26 "touch longlist.txt && scp longlist.txt linuxproject@192.168.1.18:/home/linuxproject"
  • 方案3:在test-server的SSH全局配置中为目标主机绑定固定私钥路径,不依赖用户shell环境
    在/etc/ssh/ssh_config中增加配置段:
    Host 192.168.1.18
        IdentityFile /home/test-server/.ssh/id_rsa
        User linuxproject
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 06:36:03