SSH certified_keys 명령 옵션 : 여러 명령? 단일 명령으로 제한하는 command = “…”옵션이 있습니다.

authorized_keys에는 키를 단일 명령으로 제한하는 command = “…”옵션이 있습니다. 키를 여러 명령 으로 제한하는 방법이 있습니까? 예를 들어 정규 표현식을 사용하거나 다른 구성 파일을 편집하여?



답변

아니요. “허용”명령이 아니라 “강제”명령 ( ForceCommand 옵션)입니다.

유일한 가능성은 다른 명령에 다른 키를 사용하거나에서 매개 변수를 읽는 것 stdin입니다.


답변

명령은 “강제”이므로 키당 하나의 명령 만 가질 수 있습니다.

그러나 랩퍼 스크립트를 사용할 수 있습니다. 호출 된 명령은 원래 명령 행을 환경 변수로 $SSH_ORIGINAL_COMMAND가져와 평가할 수 있습니다.

예를 들어 ~/.ssh/allowed-commands.sh:

#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.

case "$SSH_ORIGINAL_COMMAND" in
    "systemctl restart cups")
        systemctl restart cups
        ;;
    "shutdown -r now")
        shutdown -r now
        ;;
    *)
        echo "Access denied"
        exit 1
        ;;
esac

그런 다음에 참조 ~/.ssh/authorized_keys

command="/home/user/.ssh/allowed-commands.sh",…


답변

위대한 SSH 인 O’Reilly 의 Secure Shell : The Definitive Guide ( 8 장)에는 다음과 같은 스크립트를 사용한 좋은 예가 있습니다.

#!/bin/sh

/bin/echo "Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit"

/bin/echo "Your choice:"

read ans

while [ "$ans" != "q" ]
do
   case "$ans" in
      1)
         /bin/date
         ;;
      2)
         /usr/bin/who
         ;;
      3)
         /usr/bin/top
         ;;
      q)
         /bin/echo "Goodbye"
         exit 0
         ;;
      *)
         /bin/echo "Invalid choice '$ans': please try again"
         ;;
   esac
   /bin/echo "Your choice:"
   read ans
done
exit 0

.authorized_keys파일 에서 이것을 다음 과 같이 사용하십시오 :

command="/path/to/your/script.sh" <ssh-key>

…이 작업을 수행 할 때 이것을 제공합니다 ssh.

Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit
Your choice:


답변

다른 접근 방식은 예를 들어 주어진 사용자에 대해 제한된 쉘을 사용하거나 특정 디렉토리에있는 모든 파일 / 스크립트에 명령을 제한하는 래퍼를 사용하여 래퍼를 변경하지 않고 명령 목록을 보강 할 수 있습니다.

또 다른 기사에서는 허용되는 명령에 대한 명령 행 인수를 허용하지만 일반 표현식으로 표현 된 규칙으로이를 잠글 수있는 일반 스크립트에 대해 설명합니다.

이 예제 는 다음과 같이 표현됩니다.

command="only systemctl shutdown"

그리고이 내용으로 .onlyrules파일을 만들 수 있습니다.

\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}

이 ‘유일한’접근 방식의 장점은 각 사용자 및 상황에 대해 개별 스크립트를 작성할 필요가 없다는 것입니다.


답변