SSH 세션의 heredoc 블록 내부에 있는 sudo 명령이 작동하지 않습니다.

SSH 세션의 heredoc 블록 내부에 있는 sudo 명령이 작동하지 않습니다.

heredoc을 사용하고 모든 명령을 heredoc에 넣으면,

ssh -t -i master.pem cloud-user@$1 <<EOSSH
sudo service x restart
sudo service y restart
EOSSH

오류가 발생합니다.

Pseudo-terminal will not be allocated because stdin is not a terminal.

다른 -t 옵션을 추가하면 제대로 작동합니다.

ssh -t -t -i master.pem cloud-user@$1 <<EOSSH
sudo service x restart
sudo service y restart
EOSSH

pseudo-terminalSSH 세션의 맥락에서 이는 무엇을 의미합니까?

stdin is not a terminal- Bash는 SSH 클라이언트를 위한 표준 입력 터미널을 제공하지 않습니까?

옵션은 무엇을 -t의미하며 -t -t옵션과 어떻게 다릅니까 -t?

답변1

설명된 대로 man ssh:

-t는 의사 tty 할당을 강제합니다. 이는
           원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며 , 이는
           예를 들어 메뉴 서비스를 구현할 때 유용합니다. 여러 -t
           옵션은 ssh에 로컬 tty가 없더라도 tty 할당을 강제합니다.

관련 정보