![ssh -t를 통해 원격으로 sudo 명령을 실행하는 방법은 무엇입니까?](https://linux55.com/image/33293/ssh%20-t%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%9B%90%EA%B2%A9%EC%9C%BC%EB%A1%9C%20sudo%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
ssh -t
을 통해 원격 호스트에 로그인하는 스크립트가 있습니다 sudo service foo restart
.
요구 사항은 원격 호스트에서 비밀번호를 묻는 메시지가 표시되지 않도록 하는 것입니다. 원격 호스트는 SSH 인증서를 통해 인증됩니다. 이 사용자에게는 원격 호스트의 파일이 sudoers
허용됩니다 NOPASSWD
.
그러나 테스트 중에 비밀번호를 입력하라는 메시지가 표시되었는데 이는 허용되지 않습니다. -t
플래그 없이 수동으로 실행 하면 작동합니다. 그러나 -t
플래그는 모든 것을 덜 중요하게 만듭니다.
해결책이 있나요?
답변1
requiretty
옵션 을 비활성화하고 실행할 수도 있습니다.sudoers
ssh
아니요플래그 -t
(또는 및 -T
)가 유효합니다.
다음과 같은 것을 추가하십시오 sudoers
(테스트되지 않음).
Defaults:{your ssh user} !requiretty
이를 NOPASSWD
이미 사용 중인 명령과 결합하면 pseudo-tty를 할당하지 않고도 sudo 명령을 실행할 수 있습니다.
requiretty
사용자 대신 명령을 변경할 수도 있습니다 .
답변2
SSH 키를 생성하여 원격 호스트로 전송합니다.
다음 명령을 사용하여 RSA SSH 키를 생성합니다.
[root@localhost ~] ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Hit ENTER Enter passphrase (empty for no passphrase): Hit ENTER Enter same passphrase again: Hit ENTER
/root/.ssh/id_rsa.pub
키를 찾아 리모컨으로 전송하려면 다음 명령을 사용하세요.ssh-copy-id -i /root/.ssh/id_rsa.pub root@remote:/root
지금 로그인해 보세요. 원격 비밀번호를 묻지 않습니다.
답변3
나에게는 이것이 잘 작동하지만 다음과 같이 경고하십시오. stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다.
ssh -t username@hostname1 << 'EOS'
sudo sh
hostname
EOS
Pseudo-terminal will not be allocated because stdin is not a terminal.
hostname1