Executar servidor remoto de comando embutido com ssh

1

Estou tentando criar um script único que se conecta a um servidor remoto e executa uma atualização, mas quero ter certeza de que ninguém está usando a máquina no momento, então executo um comando "ps" para ver o processo e, em seguida, avisa se a instalação deve continuar. Aqui está o código que estou tentando fazer:

ssh -T root@$machine <<- 'END'
    #Show the non-root processes
    ps -ef | grep -v root

    #Prompt if should continue (this doesn't work)
    echo "Continuar a instalação? [y/n]"
    select valor in y n
    do
        case $REPLY in
            y )
                echo "Digitado y"
                break
                ;;
            n )
                echo "Digitado n"
                exit
                ;;
        esac
    done

    #Test if it's working
    echo "Test"
END

Quando executo este código, obtenho o seguinte comportamento:

Continuar a instalação? [y/n]
1) y
2) n
#? 1) y
2) n
#? #? 1) y
2) n
#? #? 
#? 1) y
2) n
#? #? #? 1) y
2) n
#? #? #? #?

E o script é fechado. Eu tentei executar o ssh com a opção -t -t, mas ainda assim recebo o mesmo problema. O que estou perdendo?

    
por JefersonFG 12.04.2016 / 14:53

2 respostas

0

Eu decidi separar o comando em duas conexões ssh, uma para listar os processos e outro para atualizar, e no meio deles o prompt para continuar:

ssh -T root@$machine <<- 'END1'
    ps -ef | grep -v root | grep -v lightdm
END1

echo "Continuar a instalação? [y/n]"
select valor in y n
do
    case $REPLY in
        y )
            break
            ;;
        n )
            exit
            ;;
    esac
done

ssh -T root@$machine <<- 'END2'
    printf "Test\n"
END2

O problema é que você precisará colocar a senha para a conexão ssh duas vezes.

    
por 13.04.2016 / 21:50
2

Você não pode se comunicar com o processo remoto ( select ), quando você coloca o script em stdin . Acontece com você que o select lê algum lixo do seu stdin e depois lê EOF, quando sua entrada termina.

Você deve copiar o arquivo para o servidor usando scp e depois executá-lo.

    
por 12.04.2016 / 18:09

Tags