"admin" 사용자에게는 SSH 세션을 허용하지만 "root" 사용자에게는 SSH 세션을 허용하지 않도록 구성된 Linux(debian 기반) 서버가 있습니다. 두 계정은 동일한 비밀번호를 공유하기 때문에 어떻게든 연결됩니다.
관리자로서 SSH 세션을 진행하는 동안 "root" 사용자로 전환하지 않는 한 명령을 실행하려면 "sudo"가 필요합니다.
시스템 시작 시에도 때때로 실행해야 하는 일부 서비스가 있습니다. 저는 현재 개인/공개 키 메커니즘을 사용하여 서버에서 원격으로 명령을 실행하고 있습니다. 일부 명령은 수동으로 입력되었고 다른 명령은 내가 실행한 쉘 스크립트였습니다. 현재 명령이 sudo를 사용할 때 서버는 여전히 비밀번호를 요구합니다.
질문: 비밀번호를 제공하지 않고 "admin" 사용자로 원격으로 이를 실행하려면 어떻게 해야 합니까? sudo 요구 사항을 충족하기 위해 개인/공개 키를 사용할 수 있습니까? 아니면 사용자 "root"로 쉘 스크립트를 시작하는 방법이 있을까요?
sudo를 사용하여 비밀번호 입력을 피할 수 있습니까? 그렇지 않다면 나와 같은 상황에 대해 어떤 다른 옵션이 있습니까?
답변1
특정 명령에 대해 비밀번호를 건너뛰도록 sudo에 지시할 수 있습니다.
예를 들어/etc/sudoers
archemar ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*
이를 통해 다음을 사용할 수 있습니다.
sudo -u www-data /bin/rm -rf /var/www/log/upload.*
비밀번호가 없는 Archemar로.
알아채다
sudo -u www-data rm -rf /var/www/log/upload.*
(*) rm
때문에 작동하지 않습니다(비밀번호를 묻습니다) ./bin/rm
편집하려면 명령을 /etc/sudoers
사용 하십시오 .visudo
고급 수준에 도달하면 /etc/sudoers.d
.
(*) 최신 운영 체제(2022년경 redhat 7.x)의 이러한 변경 사항으로 인해 rm
경로가 일치 /bin/rm
하면 sudoers.conf
를 사용할 수 있습니다 rm
.
답변2
stdin
가장 쉬운 방법은 지원 하는 경우 비밀번호를 제공하는 것입니다 sudo
(-S 키)
ssh -t admin@remotehost "echo <yourpassword> |sudo -S <yourcommand>"
답변3
계정이 어떤 방식으로 연결되어 있는 경우 한 계정에는 SSH를 허용하고 다른 계정에는 허용하지 않는 것은 의미가 없습니다. 내가 할 일은 다음과 같습니다.
- 비밀번호가 아닌 SSH 키로만 액세스를 허용하는 루트용 SSH를 활성화합니다.
- 특정 명령에만 사용할 새 키를 만듭니다.
- 실행해야 하는 키와 명령을
authorized_keys
루트에 배치하면 키에 연결되면 명령이 실행됩니다.
이는 호출자가 쉘을 가질 수 없고 다른 명령을 실행할 수 없기 때문에 안전합니다(그가 쉘을 제공하더라도).
여기에서 예를 볼 수 있습니다.https://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefine-set-of-commands-after-login그리고 command=
문법. 키 대신 인증서를 사용하는 경우 명령을 인증서에 포함하여 동일한 작업을 수행하거나 구성 옵션을 사용하여 전역적으로 수행할 수도 있습니다.ForceCommand
바라보다http://larstobi.blogspot.com/2011/01/restrict-ssh-access-to-one-command-but.html또 다른 예(명령의 매개변수를 고려해야 함을 보여줍니다)
답변4
Archemar의 답변에 추가하려면 명령을 실행하는 sudo
사용자의 비밀번호가 아닌 실행 중인 사용자의 비밀번호를 입력하세요 . sudo
"admin"과 "root" 계정이 "연결"되어 있으며 동일한 비밀번호를 공유한다고 말합니다. sudo
"admin" 계정의 비밀번호를 수락하는 것(및 sudo
"admin"의 비밀번호가 변경될 때 변경되는 비밀번호를 허용하는 비밀번호) 을 기반으로 이러한 결론에 도달했다면 이는 정상적인 동작입니다 sudo
.