2017-03-02 24 views
0

私は最初のsshをサーバーに書き込んだ後、そのサーバーからElastiCache Redisエンドポイントにtelnetで接続しようとしています。TelnetコマンドをBashスクリプトでSSHに渡す

マイコードは以下の通りです:telnet.sh

#!/bin/bash 
... 
ssh -t -i $key_home [email protected]$private_ip << EOF 
     telnet $endpoint $_port 
    EOF 
私は、ユーザーが起動した後のRedisがコマンドをcliを入力できるように私のbashスクリプトを呼び出して、ユーザーが対話的にRedisのクラスタに接続することがしたい

telnet.sh。

上記のコードが開き、redisクラスタに接続しますが、すぐにsshセッションを閉じます。 Redis Clusterに接続して入力をユーザに直接戻す方法はありますか?

ありがとうございます!

答えて

2

stdinをheredocでオーバーライドしないでください。ユーザーの操作に必要です。代わりに、スクリプトをsshのコマンドライン引数としてリモートで実行するように渡します。 endpoint='$(rm -rf $HOME)'場合、その値は次のようにリモートシェルによって解釈されることを確実にする - 私達の変数のeval -safeバージョンを生成するprintf %qを使用

#!/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" "[email protected]$private_ip" "$cmd" 

コンテンツが与えられるように、正確telnetコマンドに渡されることを確実にします定数文字列。

+0

ありがとうチャールズ。それはトリックでした!また、きれいな説明に感謝! – ysscoding1

関連する問題