我有一个Bash脚本,它将获得一个IP作为SSH隧道的一部分,但运行该脚本SSH隧道会失败。当使用set -x
时,我可以看到它将SSH命令的参数放在单引号中,手动运行这一行会导致同样的错误。
脚本:
ssh -N -L 9000:${ip_array[$2]}:443 ssh-server
第一个参数在脚本的其他地方用于其他内容,这就是为什么在这里使用第二个参数。ssh-server
是我的SSH配置中的一个别名,它指向我正在通过隧道传输的服务器。
我得到的输出是:
ssh -N -L '9000:"172.0.0.1":443' ssh-server
这可能是因为获取IP的脚本会向数组返回字符串吗?
您可以先尝试删除双引号:
ip=$(echo "${ip_array[$2]}" | sed "s/"//g")
ssh -N -L 9000:${ip}:443 ssh-server
或者只使用shell参数展开来删除引号:
ssh -N -L 9000:${ip_array[$2]//"/}:443 ssh-server
这句单独的双引号可能会打乱编辑器的语法高亮显示。
通过tr
命令管道传输去掉引号:
ssh -N -L 9000:$( echo ${ip_array[$2]} | tr -d '"' ):443 ssh-server