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

Ubuntu 22(WSL)下Bash脚本因\r字符导致SSH连接失败求助

解决SSH连接地址带$和\r字符的问题

以下是针对问题的具体解决方法:

  • 修复循环读取IP列表的逻辑
    如果你的脚本用while read循环读取IP列表,修改为带参数的读取方式,同时清理行尾的\r字符:

    while IFS= read -r line; do
        # 用bash参数扩展直接移除行尾的\r
        clean_addr=${line%$'\r'}
        # 执行sshpass+SSH命令,确保变量用双引号包裹
        sshpass -p "你的密码" ssh "$clean_addr" "要执行的采集命令"
    done < "$1"
    

    解释:IFS=保留行首行尾的空白,-r避免将\r解析为转义字符,${line%$'\r'}直接截取掉行尾的回车符,比调用外部工具更高效。

  • 彻底清理IP列表文件的特殊字符
    若dos2unix处理无效,用tr命令强制删除文件中的所有回车符:

    tr -d '\r' < 你的IP列表文件.txt > 清理后的IP列表文件.txt
    

    之后用清理后的文件作为脚本参数运行。

  • 排查变量引用问题
    确保所有存储远程地址的变量都用双引号包裹,避免bash将含特殊字符的内容解析为ANSI-C引号格式(也就是你看到的$'...')。

  • 验证单条连接命令
    先手动执行不含多余字符的命令测试连通性,排除SSH本身的配置问题:

    sshpass -p "你的密码" ssh mynewuser@192.168.10.4 "要执行的采集命令"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:52:10