shell “ssh:无法解析主机名:我的bash脚本出现“No address associated with hostname”错误

u1ehiz5o  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(279)

我尝试做一个bash脚本,它连接到终端中的openvpn,然后打开另一个终端窗口,然后ssh进入系统。但我最终得到错误“ssh:无法解析主机名:没有与主机名“”关联的地址。我的代码:

#!/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'"

可能有一些错误,在“读IP”的一部分或“htb学生@$IP”,但我不能弄清楚。
我试着在$IP周围加上引号,但没有用。我希望它能ssh没有任何错误。

pes8fvy9

pes8fvy91#

直接的问题是,您在一个双引号的上下文中传递$IP,因此在read有机会运行之前,它就被 shell 展开了。
如果你想将代码传递给远程shell,让本地shell通过声明一个函数来封装它,然后告诉shell将该函数序列化为一个可以传递给ssh的字符串:

#!/bin/bash

case $BASH_VERSION in [1-4].*) echo "ERROR: Bash 5.0+ needed" >&2; exit 1;; esac

windowedCommand() {
  read IP
  ssh htb-student@"$IP" 'echo "Correctly opened shell $SHELL on remote host; now exiting"'
}

gnome-terminal --tab --title="test" -- \
  bash -c "$(declare -f windowedCommand); windowedCommand"

相关问题