我正在尝试将bash首先写入服务器,然后从该服务器telnet到ElastiCache Redis端点。
我的代码如下:telnet.sh
#!/bin/bash
...
ssh -t -i $key_home ec2-user@$private_ip << EOF
telnet $endpoint $_port
EOF
我想调用我的bash脚本并让用户以交互方式连接到Redis群集,以便用户可以在调用telnet.sh后输入redis cli命令。
以上代码打开并连接到redis群集,但会立即关闭ssh会话。有没有办法保持与Redis群集的连接并将输入直接发送给用户?
谢谢!
答案 0 :(得分:2)
不要用heredoc覆盖stdin - 你需要它来进行用户交互。相反,将脚本作为ssh的命令行参数远程运行。
#!/bin/bash
# ^^^^-- bash, not /bin/sh, to ensure that printf %q is available
# ...ksh can also be used if modified to not need printf -v.
# generate a script to run remotely
printf -v cmd 'telnet %q %q' "$endpoint" "$_port"
# run that script
ssh -t -i "$key_home" "ec2-user@$private_ip" "$cmd"
使用printf %q
生成eval
- 我们变量的安全版本可确保内容完全按照给定的telnet
命令传递 - 确保即使{{1} ,该值被远程shell解释为常量字符串。