sshpass调用环境变量SSHPASS执行SSH连接提示权限拒绝,手动输入密码可正常连接
sshpass调用环境变量SSHPASS执行SSH连接提示权限拒绝,手动输入密码可正常连接
遇到这种情况别着急,我来帮你排查几个常见的原因,应该能解决问题:
检查环境变量是否正确导出:很多时候我们只是定义了变量(比如
SSHPASS="your_password"),但没执行export SSHPASS,这会导致sshpass这个子进程无法读取到SSHPASS变量的值。你可以先执行echo $SSHPASS确认输出的密码和你手动输入的完全一致,接着执行export SSHPASS,再重新运行sshpass命令试试。留意密码中的特殊字符:如果你的密码包含
$、!、\这类shell特殊字符,直接用双引号赋值可能会被shell解析修改,导致变量里的密码和实际不符。比如密码是pa$$123,用SSHPASS="pa$$123"赋值时,$$会被替换成当前进程ID,密码就错了。这时候建议用单引号赋值:SSHPASS='pa$$123',这样shell就不会解析里面的特殊字符了。试试sshpass的环境变量模式:其实sshpass支持直接读取环境变量SSHPASS,不用在命令行显式指定
-p "$SSHPASS"。你可以先确保SSHPASS已经正确导出,然后直接执行sshpass ssh -o StrictHostKeyChecking=no root@address,这样能避开命令行引号解析的问题。确认命令中的引号是否正确:你代码里的
"$SSHPASS"是转义后的双引号,实际执行时要确保是正常的双引号("$SSHPASS"),避免因为引号格式错误导致变量没被正确解析。
备注:内容来源于stack exchange,提问作者palmasd1
相关产品推荐
相关产品推荐

