여러 서버에서 다양한 JBoss 인스턴스를 관리하기 위해 Bash 스크립트를 작성 중입니다.
이 스크립트를 사용하면 사용자는 각 인스턴스의 상태를 확인하고 중지/시작할 수 있습니다. 이 스크립트는 /opt
중지/시작 섹션에 있으며 각 디렉토리에 있는 아래 첨자에 매개변수를 전달합니다 /jboss/bin
.
중지/중지 권한이 부여된 사용자는 이미 애플리케이션 사용자( )로서 jbossuser
무엇이든 실행할 수 있는 권한을 갖고 있으며 다른 서버에 대해 SSH 키가 설정되어 있습니다. 이 기능을 사용하는 데에는 아무런 문제가 없었습니다.
모든 사용자(즉, 애플리케이션 사용자로서 실행 권한이 없는 사용자)가 각 인스턴스의 상태를 검사할 수 있도록 허용하고 싶습니다. 이를 위해 나는 다음을 가지고 있습니다:
status() {
pid=$(ssh -q -t jbossuser@${server} "ps -ef | grep "$instance" | grep -wv 'grep\|vi\|vim' | awk '{print \$2}'")
if [ ${#pid} -gt 0 ]
then
echo "$name > ${yellow}ONLINE ${default}PID: $pid"
else
echo "$name > ${red}OFFLINE${default}"
fi
}
스크립트가 다음을 사용하여 실행되지 않으면 sudo -u jbossuser ./script.sh
(표준 사용자는 이 작업을 수행할 수 없음) jbossuser의 비밀번호를 묻는 메시지가 표시됩니다.
이러한 사용자가 이 특정 명령을 실행할 수 있도록 하려면 sudoers 파일에 무언가를 추가해야 한다는 것을 알고 있지만 무엇을 추가해야 할지 잘 모르겠습니다. 나는 이것을 했다:
user ALL=(jbossuser) NOPASSWD: /usr/bin/ssh
하지만 SSH를 몇 개의 서버와 해당 명령 jbossuser
에만 허용하도록 제한하고 싶습니다 .ps -ef
/편집하다:
답변/댓글을 바탕으로 제가 하려는 작업이 무엇인지, 문제가 무엇인지 더 명확히 해야 할 것 같습니다.
시스템 관리자는 다음 스크립트를 실행합니다.
sudo -u jbossuser ./script.sh
표준 사용자는 sudo를 사용할 수 없으므로 다음과 같이 실행하세요.
./script.sh
이 기능을 실행하는 사람들은 jbossuser
이전에 언급한 기능을 호출하는 옵션을 선택하는 데 아무런 문제가 없을 것입니다. 왜냐하면 이 기능은 status()
다른 서버에 연결하기 위해 설정된 SSH 키를 사용하기 때문입니다.jbossuser
jbossuser
이 두 사용자는 (표준 사용자) ssh 사용이 허용되지 않아 비밀번호를 입력하라는 메시지가 표시되고 오류가 발생하기 때문에 실행하지 않았습니다 . SSH를 사용할 수 있더라도 jbossuser
다른 서버에 연결할 수 있는 SSH 키가 없습니다 .
표준 사용자만 허용하고 싶습니다.
sudo -u jbossuser ssh -q -t jbossuser@[hostname] ps -ef | grep [process]
그런 다음 관리자와 표준 사용자 모두에게 작동하도록 처음에 status()
포함할 기능을 업데이트하겠습니다 .sudo -u jbossuser
답변1
여기서 해결해야 할 몇 가지 문제가 있습니다.
특정 호스트에만 액세스를 허용하는 방법은 무엇입니까?
이는 소스 호스트의 사용자에게 특정 SSH 개인 키를 제공하여 수행할 수 있습니다. 그런 다음 일치하는 공개 키를 설치합니다.오직사용자가 액세스할 수 있는 호스트에서. 사용자가 대상 계정 비밀번호를 모르거나 비밀번호 확인이 비활성화되어 있는지 확인하십시오
sshd_config
. 사용자는 다음을 수행해야 합니다.오직SSH 키를 통해 인증하는 기능.사용자가 특정 명령만 실행하도록 제한하는 방법은 무엇입니까?
이는 위의 #1과 유사하게 해결될 수 있습니다. 대상 서버의 사용자
~/.ssh/authorized_keys
파일에서 키를 추가할 때 사용자가 강제로 실행하게 될 명령을 지정할 수도 있습니다. 그들은 할 것이다아니요이 명령을 제외한 모든 작업을 수행할 수 있습니다.
authorized_keys
제공한 예제 명령을 사용하면 이 기능을 지원하는 샘플 항목은 다음과 같습니다.
command="ps -ef | grep \"$SSH_ORIGINAL_COMMAND\" | grep -wv 'grep\|vi\|vim' | awk '{print $2}'",no-pty,no-port-forwarding,no-x11 -전달, 에이전트 없는 전달 ssh-rsa AAAADAQABAAAAgQDAkwY/8z8sADor5NmM0rZd3clWIcycSzP1gj1gjZCymuYxXRZX/YFnjphkuCWU7c4KK6AtS4Xv1OFjpqtZ6ucBEws+sJIS7hfdELWuT mmYeO3UKL 1p9xt 4lJRlv1F8WZkUpy5iUo6VqZbgwywzyiqZj5u100Rcbho4BDFjYbSWOw== jbossuser@source_host
노트:이것은 한 줄이어야 합니다 authorized_keys
!
ssh 명령을 실행할 때 사용자는 명령줄에서 grep하려는 프로세스의 이름을 전달할 수 있습니다. 다음은 사용 중인 예입니다. 이 예에서는 ps
목록에서 "crond" 프로세스를 검색하고 있습니다.
jbossuser@source_host ~$ ssh -i .ssh/testkey jbossuser@target_host crond
1044
jbossuser@source_host ~$
따라서 이 명령은 "crond" 프로세스의 PID "1044"를 반환합니다.
소스 호스트의 사용자에 대한 sudo 액세스
구문은 정확하지만 명령이 잘못되었습니다. sudo 액세스 권한을 부여하는 것이 아니라
ssh
jbossuser로 실행하려는 스크립트에 대한 권한을 부여하는 것입니다.
서로 다른 사용자가 서로 다른 호스트에 액세스해야 하는 경우 해당 사용자에게만 해당되는 SSH 개인 키를 가리키는 서로 다른 버전의 스크립트를 제공할 수 있습니다.