문맥

문맥

문맥

rsync서버의 백업을 설정하고 싶으 므로 다음 명령을 실행합니다.

rsync -r -e ssh --rsync-path="sudo rsync" [email protected]:/ /backup/

이상적으로 이 명령은 내 개인 SSH 키 비밀번호를 요청한 다음 연결하고 rsyncuser의 sudo 비밀번호를 요청한 다음 서버에서 rsync를 실행합니다. 하지만 악명 높은 오류가 발생했습니다.

sudo: no tty present and no askpass program specified

/etc/sudoers그래서 이것을 (를 사용하여 ) 에 추가해야 했는데 sudo visudo, 이는 기본적으로 사용자에게 비밀번호 없이 시스템에 대한 전체 읽기-쓰기 액세스 권한을 제공하는데 rsyncuser, 이는 내 취향이 아닙니다.

rsyncuser ALL= NOPASSWD:/usr/bin/rsync

질문

sudo에게 다른 TTY에서 비밀번호를 읽도록 어떻게 지시할 수 있나요?

이렇게 하면 rsync로컬 컴퓨터의 한 터미널 창에서 실행하고 다른 터미널 창을 사용하여 서버에 대한 (별도의) SSH 연결을 열고 거기에 sudo 암호를 제공할 수 있습니다.

expect비슷한 일을 할 수 있다고 생각할 수 있는 유일한 방법은 명명된 파이프에서 비밀번호를 읽는 스크립트 주위에 sudo를 사용 하고 다른 터미널에서 해당 파이프에 쓰는 것입니다.

참고: 이는 실제적인 목적보다는 실험과 학습을 위한 것입니다.rsync와 함께 sudo를 사용하는 방법을 알아내려는 것이 아닙니다., 나는 그것에 관해 찾을 수 있는 모든 것을 읽었습니다.

답변1

sudoSUDO_ASKPASS귀하의 경우와 같이 터미널에서 실행하지 않거나 -A가 설정된 경우 환경 변수를 읽습니다. 비밀번호를 얻기 위해 실행 명령으로 사용합니다. 예를 들어:

echo -e '#!/bin/sh\nhead -n 1' > ~/bin/reader
chmod a+x ~/bin/reader
export SUDO_ASKPASS="$HOME/bin/reader"
sudo -A echo "I'm root\!"

표준 입력에서는 비밀번호를 입력하라는 메시지가 표시되며 터미널은 필요하지 않습니다.

그러나 수행하려는 특정 경우에는 루트 SSH 로그인을 허용하는 것이 더 좋지만 SSH 키와 rsync로 제한된 명령만 사용하는 것이 좋습니다. 이에 대한 좋은 자료가 있습니다여기.

답변2

노력하다:

ssh userfoo@host "sudo -S p'enter pw: ' [command] "

enter pw:그러면 로컬 호스트/터미널에 표시되는 비밀번호 프롬프트(" ​​")가 표시됩니다 . 이 방법의 단점은 비밀번호가 터미널 창에 명확하게 표시되어 보안상 위험하다는 것입니다. 로컬에 저장되지는 ​​않지만 .bash_history터미널 창 스크롤백 기록입니다. 따라서 Konsole을 사용하는 경우 Ctrl++를 사용하여 Shift삭제 K하세요.

관련 정보