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