2 votes

Console interactif de script SSH nécessitant des caractères échappés

Je voudrais modifier ma connexion SSH existante via un script shell. Donc si j'exécute un script existant à distance, je voudrais qu'il ouvre un nouveau port à tunneliser.

Interactivement je peux le faire via:

ubuntu@6c1a17c3864c:~$ ~C
ssh> -R 9000:localhost:9000

Comme cela est beaucoup plus clair que je ne pourrais le faire: https://unix.stackexchange.com/questions/33557/using-an-already-established-ssh-channel.

Idéalement, je voudrais utiliser un script shell pour interagir via les caractères échappés pour ajuster la connexion existante.

J'ai essayé quelque chose comme:

#!/bin/bash 
# Tentative 1
echo -n '\r\f \~\~C -L 9000:localhost:9000'
# Tentative 2
echo -e '\r\f\~\C -R 9000:localhost:9000'
printf '\~\C -L 9000:localhost:9000'
netstat -taln

Ainsi que quelques autres combinaisons.

J'ai vérifié que à la fois echo et printf sont des commandes internes au shell.

J'utilise Bash 4.3.11 x86_64-pc-linux-gnu.

0voto

Jakuje Points 9351

Vous auriez besoin de script expect pour y parvenir. Le problème est que ces caractères d'échappement ne sont PAS évalués par bash, mais localement par votre client ssh. Exemple qui devrait faire l'affaire:

#!/usr/bin/expect -f
set timeout 10
exp_internal 1
spawn telnet $argv
expect "login:"
send "mylogin\n"
expect "Password:"
send "mypass\n"
expect '~$'
# Envoyer quelques commandes
close

Source

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X