![tty(-t) 없이 스크립트에서 ssh를 통해 원격 호스트에서 실행할 때 sudo가 중단됩니다.](https://linux55.com/image/49046/tty(-t)%20%EC%97%86%EC%9D%B4%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20ssh%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%9B%90%EA%B2%A9%20%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%20sudo%EA%B0%80%20%EC%A4%91%EB%8B%A8%EB%90%A9%EB%8B%88%EB%8B%A4..png)
AIX 6.1 서버가 있고 sudo
bash 스크립트에서 원격 명령을 실행해야 합니다.
내 bash 스크립트를 단순화하면 다음과 같습니다.
TestSudo.sh
#!/usr/bin/bash
set -x
sudo env
sudo
비밀번호 없이 로컬에서 명령을 실행할 수 있습니다 .
[user@server]$ sudo env
VAR=VAL
...
스크립트를 로컬에서 실행할 수 있습니다.
[user@server]$ /tmp/testSudo.sh
+ sudo env
VAR=VAL
...
sudo
원격 호스트에서 실행할 수 있습니다 .
[user@client]$ ssh user@server sudo env
VAR=VAL
...
tty를 사용하여 원격 호스트에서 스크립트를 실행할 수 있습니다.
[user@client]$ ssh -t user@server /tmp/testSudo.sh
+ sudo env
VAR=VAL
...
tty가 없으면 원격 호스트에서 스크립트를 실행할 수 없습니다(그리고 컨텍스트에 -t 옵션을 추가할 수도 없습니다).
[user@client]$ ssh user@server /tmp/testSudo.sh
+ sudo env
거기에 걸려 있어요.
답변1
터미널 없이 실행되는 경우 Sudo는 비밀번호 쿼리를 처리하기 위해 도우미가 필요합니다.
SUDO_ASKPASS Specifies the path to a helper program used to read the
password if no terminal is available or if the -A option is specified.
일반적으로 ssh 및 sudo를 통해 연결할 때 비밀번호를 입력해야 하지만 터미널이 할당되지 않고 오류가 보고됩니다. AIX에서는 다를 수 있습니다.
sudo 설정을 확인하고 모든 원격 시스템에서 NOPASSWD를 활성화하십시오. 올바른 규칙은 다음과 같습니다(/etc/sudoers 끝에 추가).
user ALL= NOPASSWD:/tmp/testSudo.sh