서버에서 쉘 스크립트의 원격 실행을 활성화해야 하지만 다른 모든 액세스는 거부해야 합니다. 스크립트는 단일 매개변수(켜기/끄기/상태)를 허용하는 스위치입니다.이것내 질문에 거의 답변했지만 스크립트를 원격으로 실행할 수는 있지만 여전히 매개변수를 전달할 수는 없습니다. 가능한 모든 매개변수에 대해 새 쉘 계정을 생성하지 않고 이를 수행할 수 있는 방법이 있습니까?
기본적으로 원격 서버에서 실행할 수 있기를 원합니다.
myclient$ ssh remotecontrol@myserver on
myclient$ ssh remotecontrol@myserver off
myclient$ ssh remotecontrol@myserver status
그리고 다음에 해당합니다:
myserver$ ./myscript.sh on
myserver$ ./myscript.sh off
myserver$ ./myscript.sh status
링크된 기사에 있는 Arcege의 응답은 이를 수행하지만 쉘 스크립트에서 한 줄의 코드로 작동하지 않습니다.
솔루션 세부정보:
# useradd -Urms /home/remotecontrol/shell.sh remotecontrol
~remotecontrol/.ssh/authorized_keys
원격 로그인을 비활성화 하려면 다음 줄을 추가하십시오 .
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa [...public key...] remoteuser@remotehost
다음 쉘 스크립트를 추가했습니다 ~remotecontrol/shell.sh
.
#!/usr/bin/env bash
case "$2" in
on)
echo 'Command: on'
;;
off)
echo 'Command: off'
;;
status)
echo 'Command: status'
;;
*)
echo 'Invalid command'
;;
esac
답변1
사용자 정의 쉘을 사용하는 경우Alce의 제안에 따라 그리고 기원전 2년, 쉘은 다음과 같이 호출되기 때문에 사용자가 실행하려는 명령을 인수로 수신합니다.
shellname -c the_original_command
따라서 -c
(당신의 것 $1
)을 무시하고 에서 명령을 찾으십시오 $2
. 예를 들어:
#!/bin/sh
case "$2" in
on)
do something
;;
off)
do something else
;;
*)
echo "wrong command name!" >&2
exit 1
esac
강제 명령을 사용하는 경우Colen의 제안을 바탕으로그러면 환경 변수에서 사용자가 호출하려는 명령을 찾을 수 있습니다 $SSH_ORIGINAL_COMMAND
. 위와 비슷한 스크립트를 사용할 수 있습니다.