bash脚本执行ssh报错:无法解析主机名 求助排查
问题根源
你的脚本里的$IP被当前shell提前展开了——外层的双引号会让$IP在启动gnome-terminal时就被解析,而此时read IP还没执行,$IP是空字符串,导致ssh命令变成ssh htb-student@,这就是报错的核心原因。
修正方案
有两种简单的修正方式:
方式一:转义变量符号
把$IP改成\$IP,让$在当前shell不被解析,传递到新的bash进程中再处理:
#!/bin/bash sudo openvpn academy.ovpn & gnome-terminal --tab --title="test" --command="bash -c 'read IP; ssh htb-student@\$IP; echo HTB_@cademy_stdnt!; $SHELL'"
方式二:调整引号嵌套
把外层的双引号换成单引号,内部的单引号换成双引号,避免当前shell提前解析变量:
#!/bin/bash sudo openvpn academy.ovpn & gnome-terminal --tab --title="test" --command='bash -c "read IP; ssh htb-student@$IP; echo HTB_@cademy_stdnt!; $SHELL"'
额外建议
VPN启动后需要一点时间建立连接,直接打开ssh终端可能会因为网络未就绪失败,建议在启动gnome-terminal前加个等待时间,比如:
sudo openvpn academy.ovpn & sleep 5 # 等待5秒让VPN连接建立 gnome-terminal --tab --title="test" --command='bash -c "read IP; ssh htb-student@$IP; echo HTB_@cademy_stdnt!; $SHELL"'
内容的提问来源于stack exchange,提问作者Clientic
相关产品推荐
相关产品推荐

