SSH : sudo 명령 실행


44

대화 형 쉘 스크립트가 있는데, 한 곳에서 다른 컴퓨터 (우분투 기반)에 ssh하고 루트로 무언가를 실행해야합니다 (사용자는 암호를 입력해야하지만 원격 명령은 스크립트에 명시된대로 실행해야 함).

# ...
ssh remote-machine 'sudo ls'
# ...

그러나 항상이 오류 메시지가 나타납니다.

sudo: no tty present and no askpass program specified

알았어, 분명해 그러나 어떻게 이것을 피할 수 있습니까? 이와 같은 일이 발생해야합니다.

$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:

/bin
/etc
/var

답변:


52

놀라운 ssh것은 모든 것을 치료합니다. 요점은 -tssh가 pseudo-tty를 할당하도록 플래그 를 추가하는 것입니다 .

ssh -t remote-server 'sudo ls'

1
그러나 PTY는 스크립트로 문제를 해결할 수 있습니다. ls예를 들어 출력에는 \ r \ n 엔딩이 포함됩니다.
Tobu

1
그 주위의 쉬운 방법은 ls를 비 터미널 모드로 강제하는 것입니다. ls | catstdout이 파이프임을 알 수 있습니다. 이 특정 질문에서는 터미널에서 대화 형으로 실행되도록 의도되었으므로 관련이 없습니다. 따라서 열과 색상 및 기타를 원할 것입니다.
Gabe

0

이 방법은 ssh 다음에 sudo를 사용하여 단일 스크립트를 실행합니다.

sudo 기능을 가진 "원격"사용자가 있고 루트로 실행할 스크립트가 있다고 가정 해 봅시다.

1) / etc / passwd 에 로그인 할 스크립트를 설정하십시오 :

remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh

2) "login.sh"내부에서 "sudo"로 실행하려는 스크립트를 실행합니다.

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
    #Not running as root, so we execute "sudo"
    sudo /usr/local/bin/script.sh
else
    #We are already rooted, so "sudo" is not required.
    /usr/local/bin/script.sh
fi
exit;

일반적으로 ssh login + sudo : 암호를 두 번 묻습니다. 한 번만 입력 하려면 암호없이 sudo를 시도하십시오 (권장되지 않음). <-Boldewyn 의견을 읽으십시오.

주요 장점은 "ssh"는 다른 매개 변수 (-t)를 필요로하지 않으며 sudo는 서버 측에서 강제 실행된다는 것입니다. 또한 스크립트가 종료되면 사용자도 로그 아웃됩니다.

그렇게 우아하지는 않지만 간단하고 작동합니다.


어 오. sudoers이와 같이 서버 의 파일에 원격 사용자를두면 재앙이 발생할 수 있습니다. 다른 사람이 사용자로서 (예 : 웹 서버를 통해) 액세스 권한을 얻는 경우 즉시 루트가 될 수 있습니다 . 고맙지 만 서버 구성을 방해하지 않는 솔루션을 찾고있었습니다. 해결책이 있다면 어쨌든 SSH의 인증을 sudo명령에 마술처럼 재사용하는 것이 더 흥미로울 것입니다.
Boldewyn

@Boldewyn : 예, "암호없이 sudo"를 설정 하면 보안 위험이 있습니다 ... 선택 단계입니다. SSH가 인증을 재사용 할 수 있다면 이런 종류의 "솔루션"은 필요하지 않습니다. 귀하의 의견에 감사드립니다.
lepe

-1

대화 형 작업없이 루트 액세스 권한을 얻는 다음 명령을 실행할 수 있습니다.

ssh server " sudo command" < sudopassword.txt

1
stdin은 터미널 장치가 아니기 때문에 작동하지 않습니다 (지정된 파일에서 읽습니다).
Anthony G-Monica의 정의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.