如何将Bash变量形式的IP地址传入SSH?连接卡顿求助
SSH连接卡顿?大概率是IP变量里藏了不可见换行符!
我来帮你排查这个SSH连接卡顿的问题——这绝对是个新手常踩的坑!你说echo $ip_addr能正常显示IP,但SSH连不上,核心原因几乎可以确定:你从ipaddr.txt读取的IP变量里,偷偷带上了换行符(或者Windows下的回车符)。
为什么echo看起来正常?因为echo本身会自动添加换行,变量里的隐藏换行被混过去了,但SSH会把包含换行的整个字符串当作主机名去解析,自然找不到目标,就卡在那等超时了。
快速排查与解决步骤:
先确认文件里的隐藏字符
用这个命令查看ipaddr.txt的真实内容:cat -A ipaddr.txt如果输出结尾有
$(Unix换行)或者^M$(Windows换行),那就是问题根源。正确读取IP到变量的方法
选下面任意一种方式,确保把文件里的空白/换行字符彻底清理掉:- 方法一:用
tr删除换行和回车符ip_addr=$(tr -d '\n\r' < ipaddr.txt) - 方法二:用
xargs自动修剪空白字符(最省心)ip_addr=$(xargs < ipaddr.txt) - 方法三:用
sed取第一行再删换行ip_addr=$(sed -n '1p' ipaddr.txt | tr -d '\n')
- 方法一:用
验证变量是否干净
用这个命令检查变量里有没有隐藏字符:echo -n "$ip_addr" | od -c正常输出应该只有数字、点号,比如:
0000000 1 9 2 . 1 6 8 . 1 . 1 0 0,没有\n或者\r。测试SSH连接
现在再用干净的变量连接:ssh "$ip_addr" "echo Connected successfully to \$HOSTNAME"或者也可以直接在SSH命令里读取IP,省掉变量步骤:
ssh $(xargs < ipaddr.txt) "your_command_here"
另外,如果你能修改Python脚本launcher.py,可以在写入IP的时候直接去掉换行,从根源上避免问题:
with open('ipaddr.txt', 'w') as f: f.write(ip_address.strip()) # strip()会去掉前后空白和换行
内容的提问来源于stack exchange,提问作者dhist101
相关产品推荐
相关产品推荐

