백그라운드에서 비밀번호를 입력해야하는 sudo 명령을 어떻게 실행합니까? 명령 을 실행했을 때 암호를 캐시하고

최근에 sudo인증 캐싱 기능을 비활성화 하여 매번 비밀번호를 묻는 메시지를 표시합니다.

그리고 이것은 보안에 좋지만 솔루션을 알아낼 수 없었던 약간의 문제가 발생했지만 다음과 같은 명령을 실행할 수 없습니다.

sudo <command> &

과거에는 그 sudo전에 명령 을 실행했을 때 암호를 캐시하고 sudo몇 분 동안 프롬프트없이 명령 을 실행할 수 있었으므로 명령을 실행할 수있었습니다.
그러나 미리 캐싱이없고 즉시 새 스레드를 시작 sudo하고 암호를 묻는 메시지를 표시하지 않으므로 지금 실행하면이 방법으로 실행할 수 없습니다.

따라서 내가 sudo -i전에 실행하지 않으면 다소 성가신이 형식으로 명령을 실행할 수 없습니다.
그래서이 문제를 해결하고 여전히 이런 식으로 프로그램과 명령을 실행할 수있는 방법이 있는지 궁금합니다.

나는 그놈 3.18과 함께 우분투 그놈 15.10을 실행하고 있으며, 특히이 방식으로 실행하려는 프로그램은 etherape차이 가 있다면 모든 프로그램과 명령에서 작동하는 솔루션을 정말로 원합니다.



답변

sudo백그라운드에서 실행하는 대신 백그라운드 sudo에서 명령을 실행하도록 지시하십시오. 보낸 사람 man sudo:

-b, --background
     Run the given command in the background.  Note that it is not
     possible to use shell job control to manipulate background
     processes started by sudo.  Most interactive commands will
     fail to work properly in background mode.

예를 들면 다음과 같습니다.

sudo -b sleep 10

다른 방법은 쉘을 사용하여 명령을 실행하는 것입니다.

sudo sh -c 'sleep 10 &'

다른 옵션은 암호를 얻기 위해 그래픽 프로그램을 지정하고 sudo어쨌든 백그라운드로 보내는 것입니다.

-A, --askpass
     Normally, if sudo requires a password, it will read it from
     the user's terminal.  If the -A (askpass) option is
     specified, a (possibly graphical) helper program is executed
     to read the user's password and output the password to the
     standard output.  If the SUDO_ASKPASS environment variable is
     set, it specifies the path to the helper program.  Otherwise,
     if sudo.conf(5) contains a line specifying the askpass
     program, that value will be used.  For example:

         # Path to askpass helper program
         Path askpass /usr/X11R6/bin/ssh-askpass

     If no askpass program is available, sudo will exit with an
     error.

Askpass 프로그램은 일반적으로 SSH에 사용됩니다. ssh-askpass-gnome패키지 중 하나가 제공되며 적어도 우분투 15.10에 기본적으로 설치됩니다.

SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A sleep 10 &


답변

설정 방법입니다 기꺼이 당신이 경우 timestamp_timeout같은 적어도 뭔가에 0.02(1.2 초, 난 그냥 안전한으로 말하고 싶지만 0에서) /etc/sudoers(단, 기본 설정으로 또는 함께, 귀하의 경우 필요 timestamp_timeout아무것도으로 설정하지만, 0하나는 다음을 수행 할 수 있습니다) 에서 이와 같은 별칭을 설정할 수 ~/.bashrc있습니다. 명령을 실행하기 전에 무언가를 수행 할 필요가 없으며 프로세스 제어를 유지할 수 있습니다. :

alias sudo='sudo -v; [ $? ] && sudo'

여기서의 트릭은 세미콜론으로, Bash를 sudo -v먼저 및 별도로 구문 분석 하여 사용자를 인증하고 잠재적 백그라운드 배경을 [ $? ] && sudo명령으로 제한합니다.이 명령 sudo -v은 성공 했는지 여부를 확인하고 필요한 경우 sudo다시 실행 합니다 (잠재적으로 백그라운드로).

$ alias sudo='sudo -v; [ $? ] && sudo'
$ sudo -H gedit &
[sudo] password for user:
[1] 19966
$ jobs
[1]+  Running                 [ $? ] && sudo -H gedit &


답변

당신은 할 수 없습니다. 이 &명령을 백그라운드로 즉시 보냅니다. 즉, 백그라운드에서 서브 쉘이 작성되고 명령이 실행됩니다. 의 경우와 같이 해당 명령이 프롬프트를 발행 sudo하면 프롬프트가 백그라운드에 표시되고 표시되지 않습니다.

이를 해결할 수있는 유일한 방법은 명령을 다시 포 그라운드로 가져오고 암호를 제공 한 후 백그라운드로 다시 보내는 것입니다. 예를 들면 다음과 같습니다.

$ sudo command &
$ fg
sudo command
[sudo] password for terdon:

지금, 당신의 비밀번호, 타격을 입력 Enter한 후 히트 CtrlZ다시 배경을 전송하고 bg계속 실행하도록 지시 할 수 있습니다.

더 간단한 방법은 사용하지 않을하는 것입니다 &수동 배경에, 대신, 전송 작업을하고 CtrlZ하고 bg이를 실행 한 후.

마지막으로 sudo의 비밀번호 시간 제한을 1 초 또는 2 초로 설정하는 것이 좋습니다. 그래도 플래시를 보호하려고하지 않는 한 충분한 보안을 유지하고 예상대로 명령을 실행할 수 있습니다.


답변