SSH certified_keys 명령 옵션 : 여러 명령?


17

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

답변:


9

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

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


27

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

그러나 랩퍼 스크립트를 사용할 수 있습니다. 호출 된 명령은 원래 명령 행을 환경 변수로 $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",…

1
유능한. sshd 자체가 SSH_ORIGINAL_COMMAND(per man sshd) 추가 되어 스크립트에서 사용 가능하다는 것을 분명히하는 것이 좋습니다. 또한 특정 패턴 SSH_ORIGINAL_COMMAND을 실행할 수있는 자동화 된 스크립트의 예를 제공 합니다. 참조 unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html
세드릭 기사에게

7

위대한 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:

그러나 이러한 스크립트는 기본적으로 중단 scp되며 sftp언젠가는 유용 할 수있는 다른 모든 항목이 있습니다.
Jakuje

3
@Jakuje 이것은 command일반적으로 옵션에 유효하지 않습니까?
gf_

1

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

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

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

command="only systemctl shutdown"

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

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

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


쉘 변경의 문제점은 제한되지 않는 키가있는 로그인이라도 모든 로그인에 적용된다는 것입니다. 또한 쉘 로그인 만하고 관리자 액세스 권한이없는 경우 구성된 쉘을 원하는대로 변경할 수 없습니다. 그러나 여전히 authorized_keys 파일을 편집 할 수 있습니다.
kasperd

"제한된 쉘"을 다음과 같이 사용할 수 있습니다.ForcedCommand
Georg Lehner

사용중인 계정이 일반 사용자 계정이고 필요한 조치가 특권이있는 상황에서 sudo를 사용하여 검사를 수행하고 authorized_keys 명령 옵션을 "sudo $ SSH_ORIGINAL_COMMAND"로 설정할 수 있습니까?
Steve Dee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.