비밀번호 프롬프트 없이 자동 su 로그인

비밀번호 프롬프트 없이 자동 su 로그인

저는 셸 스크립트를 작성 중이며 여러 Unix 서버에서 서비스 다시 시작 프로세스를 자동화하고 싶습니다. 저는 일반 사용자로서 서비스 재시작 명령을 실행할 권한이 없습니다. 오직s_user실행할 수 있는 권한이 있습니다.

서비스를 다시 시작하는 단계:

  1. 내 사용자 이름과 비밀번호를 사용하여 서버에 로그인합니다.
  2. 다시 시작 서비스를 실행하려면 다음을 사용하여 사용자를 s_user로 전환해야 합니다.(비밀번호를 묻지 않고 이 명령이 필요합니다)

    sudo su - s_user 
    

위 명령은 서비스를 다시 시작하기 위해 제공할 비밀번호를 묻는 메시지를 표시합니다. 모든 서버에서 이 프로세스를 수행해야 합니다.표준 입력을 통해 su에 비밀번호를 제공하여 비밀번호 프롬프트를 건너뛰고 싶습니다.

지금까지 다음 명령을 시도했습니다.

1.   echo 'password'|sudo -S su -c " .../bin/services stop" 
Output:
[sudo]password for abc.xyz: Sorry, user abc.xyz is not allowed to execute '/bin/su - s_user' -c /bin/services stop' as root on [Servername]                        

위 명령에서 비밀번호를 입력했습니다. s_user 비밀번호도 제공하려고 시도했지만 다음과 같은 결과가 표시됩니다.

[sudo]password for abc.xyz: Sorry,try again.
[sudo]password for abc.xyz:
sudo:pam_authenticate:Conversation error

아래 명령에서 "su"를 "u"로 바꾸었지만 여전히 첫 번째 명령과 동일한 출력 오류가 발생합니다.

2.  echo 'password'|sudo -S u -c " .../bin/services stop" 

아래 명령에 s_user를 제공했지만 여전히 첫 번째 명령과 동일한 출력 오류가 발생했습니다.

3.  echo 'password'|sudo -S su - s_user -c ".../bin/service stop" 

다음으로 다음 명령을 시도했습니다.

4.  echo 'my password'|su -c ".../bin/services stop" -s /bin/sh abc.xyz
Output:
Standard in must be a tty

나는 또한 다음 명령을 시도했습니다.

5.  su -c "command_to_restart_the_services" -s /bin/sh abc.xyz 

명령을 성공적으로 실행할 수 있습니다.

6.  echo password|sudo -S su - user-to-switch
    sudo -S su - user-to-switch

위 명령에는 여전히 비밀번호가 필요합니다.

한계:

• 사용할 수 없습니다"예상되는", 내 컴퓨터에 설치되어 있지 않습니다.

• 수정할 수 없습니다."수다에르"문서. 나는 권리가 없습니다.

답변1

sudo당신은 루트가 된 다음 가 su되는 것을 사용하고 있는 것으로 보입니다 s_user. 이를 위해 (에 대한 sudo) 비밀번호를 사용하게 됩니다. 비밀번호는 필요하지 않습니다 s_user.

계정에 SSH 키를 추가하여 이를 수행할 수 있지만 s_user이 경우 솔루션은 차선책이라고 생각합니다.

가장 먼저 지적하고 싶은 것은 꼭 그럴 필요도 없고 su, 사용하지 않는 것이 낫다는 점이다. 그러니 sudo su - s_user -c command하지 마세요 sudo -u s_user command. 여전히 비밀번호를 입력하라는 메시지가 표시됩니다. 하지만 이제 구성할 수 있습니다./etc/sudoers

다음과 같은 파일을 추가합니다 /etc/sudoers.d/s_commands(그러나 확인됨 /usr/bin/visudo).

Cmnd_Alias S_COMMAND=/usr/bin/command, /usr/bin/anotherCommand
%s_group ALL = (s_user) NOPASSWD : S_COMMAND

이렇게 하면 s_user로서 이러한 명령을 암호 없이 사용할 수 있지만 s_group 그룹(추가해야 함)의 사용자만 사용할 수 있습니다.

그런 다음 셸 별칭을 설정합니다(예: ) alias s_command="sudo -u s_user command".


노트:

  • su전환하려는 사용자의 비밀번호를 얻으십시오.
  • sudo기본적으로 전환하려는 사용자의 비밀번호가 사용됩니다.
  • sudo비밀번호는 stdin에서 읽히지 않고 tty에서 읽혀집니다.

답변2

한 가지 방법은 ssh를 사용하는 것입니다.

ssh-copy-id를 사용하면 인증을 저장할 수 있습니다.

ssh-copy-id [email protected]

( 키가 설정되지 않은 경우 ssh-keygen키를 생성하는 데 사용됨)

다음으로 sudo를 대신 사용하여 ssh비밀번호 프롬프트 없이 명령을 실행할 수 있습니다.

ssh [email protected] " .../bin/services stop"

답변3

이는 귀하의 문제에 대한 정확한 답은 아니지만 귀하의 작업에 대한 해결책이 될 수 있습니다.

나는 여러분이 각 서버의 s_user에 대한 비밀번호를 알고 있고 sshd해당 비밀번호가 해당 서버에 설치되어 있다고 가정합니다(그리고 예상대로 작동합니다. 서버에서 실행되는 OS에 따라 다릅니다).

~처럼프로모션넷위에서 언급했듯이 ssh를 사용할 수 있지만 서버에 로그인하기 위해 자신의 자격 증명을 사용할 필요는 없습니다.

컴퓨터에서:

먼저 ssh-keygen. 기본적으로 이는 ~/.ssh 디렉토리에 저장됩니다.

다음으로, 관련된 각 서버 호출에 대해 ssh-copy s_user@<server>서버의 s_user에 대한 비밀번호를 입력하라는 메시지가 표시됩니다.

이제 모든 것이 잘 진행되는지 확인하려면 시도해 보세요 ssh s_user@<server>. 비밀번호를 입력하지 않고도 이 작업을 수행할 수 있습니다.

이제 스크립트(로컬 컴퓨터)에서 다음을 호출할 수 있습니다.

ssh s_user@<server> "whatever-command-you-need-to-run"

비밀번호가 필요하지 않습니다.

답: 귀하의 로컬 컴퓨터도 UN*X와 유사한 운영 체제를 실행하고 있다고 가정합니다. Windows를 실행 중인 경우 Windows 패키지와 함께 제공되는 프로그램을 사용할 수 있습니다 putty.

관련 정보