SSHを使用したリモートサーバーインラインコマンドの実行

SSHを使用したリモートサーバーインラインコマンドの実行

リモートサーバーに接続して更新を実行するスクリプトを作成しようとしていますが、その時点でコンピュータを使用している人がいないことを確認したいので、「ps」コマンドを実行してプロセスを確認してから、インストールを続行する必要があるかどうかを尋ねます。私が作成しようとしているコードは次のとおりです。

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

このコードを実行すると、次の動作が発生します。

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
#? #? #? #?

その後、スクリプトが閉じます。 -t -tオプションを使用してsshを実行してみましたが、まだ同じ問題が発生しました。私は何を見逃していますか?

答え1

selectスクリプトをオンにすると、リモートプロセス()と通信できなくなりますstdin。入力が終わると、selectファイルからいくつかのゴミを読み、次にstdinEOFを読み取るという状況が発生します。

ファイルをサーバーにコピーしscpた後に実行するために使用する必要があります。

答え2

私はコマンドを2つのSSH接続に分割することにしました。 1つはプロセスの一覧表示用、もう1つは更新用で、途中で続行するように求められます。

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

問題は、SSH接続のパスワードを2回尋ねることです。

関連情報