script de menu sobre ssh

2

Eu tenho um script que pede entrada do usuário. Quando eu executo isso localmente, ele faz o que eu quero, no entanto, eu realmente gostaria de executá-lo no ssh.

Eu tentei as maneiras comuns de executar um script:

ssh someaccount @ somemachine 'mysscript.sh'

ssh someaccount @ somemachine 'bash -s' < myscript.sh '

mas quando é executado, ele não espera por nenhuma entrada do usuário e não permite que você escolha no menu.

#!/bin/bash
# Bash Menu Script Example

echo -n "What machine is sick ?"
  read machine

PS3='Please enter your choice: '
options=("Ping $machine" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Ping $machine")
            echo "you chose to ping $machine"
                        ping -c1 $machine
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice 3"
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

Obrigado

    
por user610209 20.02.2015 / 03:54

2 respostas

2

Para executar um comando interativo por meio da linha de comando ssh , é necessário informar ssh para alocar um tty no terminal remoto. (Geralmente isso não incomoda, e na maioria das vezes isso é uma boa suposição.) Adicione o -t flag para alocar um tty:

ssh -t someaccount@somemachine mysscript.sh
    
por 20.02.2015 / 10:45
0

Você precisa fazer:

root@debian:/home/mohsen# ssh [email protected] "~/test.sh"
[email protected]'s password: 
What machine is sick ?192.168.1.4
1) Ping 192.168.1.4  3) Option 3
2) Option 2      4) Quit
Please enter your choice: 1
you chose to ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
64 bytes from 192.168.1.4: icmp_req=1 ttl=64 time=0.370 ms

--- 192.168.1.4 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.370/0.370/0.370/0.000 ms
Please enter your choice: 

A sintaxe da execução remota é:

ssh account@remote_machin  "command_for_run_on_remote_machine"

A sintaxe acima foi usada para fazer backup de sysadmins.

    
por 20.02.2015 / 06:21