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파일에서 일부 쓰레기를 읽은 stdin다음 EOF를 읽는 상황이 발생합니다 .

파일을 서버에 복사 scp한 후 실행하는 데 사용해야 합니다.

답변2

나는 명령을 두 개의 SSH 연결로 분할하기로 결정했습니다. 하나는 프로세스 나열용이고 다른 하나는 업데이트용이며 중간에 계속하라는 메시지를 표시합니다.

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 연결에 대한 비밀번호를 두 번 묻는 것입니다.

관련 정보