在Bash脚本中将Telnet命令传递给SSH

时间:2017-03-02 22:01:26

标签: linux bash shell ssh telnet

我正在尝试将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群集的连接并将输入直接发送给用户?

谢谢!

1 个答案:

答案 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解释为常量字符串。