2017-03-02 1 views
0

J'essaye d'écrire un bash au premier SSH dans un serveur puis un telnet de ce serveur à un point de terminaison Redis ElastiCache.Transmettre la commande Telnet à SSH dans le script Bash

Mon code est le suivant: telnet.sh

#!/bin/bash 
... 
ssh -t -i $key_home [email protected]$private_ip << EOF 
     telnet $endpoint $_port 
    EOF 

Je voudrais appeler mon script bash et que l'utilisateur soit connecté de manière interactive au cluster Redis de sorte que l'utilisateur peut entrer Redis commandes après l'appel cli telnet.sh.

Le code ci-dessus s'ouvre et se connecte au cluster redis mais ferme immédiatement la session ssh. Existe-t-il un moyen de rester connecté au cluster Redis et de rediriger les entrées vers l'utilisateur?

Merci!

Répondre

2

Ne surchargez pas stdin avec un heredoc - vous en avez besoin pour l'interaction de l'utilisateur. Au lieu de cela, passez votre script à exécuter à distance en tant qu'argument de ligne de commande pour 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" "[email protected]$private_ip" "$cmd" 

En utilisant printf %q pour générer une eval la version -safe de nos variables assure que le contenu est passé à travers la commande telnet exactement comme donnée - veiller à ce que même si endpoint='$(rm -rf $HOME)', cette valeur est interprétée par le shell distant comme une chaîne constante.

+0

Merci beaucoup Charles. Cela a fait l'affaire! Merci aussi pour l'explication propre! – ysscoding1