사용자에게 전체 로그인 액세스 권한을 부여하지 않고 단일 명령을 허용하도록 SSHd를 어떻게 구성합니까? rpc 192.168.12.1 PTY allocation

SSH를 통해 원격 명령을 호출하는 가장 좋은 방법을 찾고 있습니다. 사용자 ‘rpcall’을 생성하고 새 인증서를 생성 한 후 authorized_keys를 채 웁니다. 좀 더 안전하게

from="ip",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty ssh-rsa ......

이제 사용자 rpcall은 터미널에 로그인 할 수 없습니다

ssh -l rpc 192.168.12.1
PTY allocation request failed on channel 0

그러나 모든 명령을 실행할 수 있습니다

ssh -l rpc 192.168.12.1 cat /etc/passwd

명령 실행을 하나의 처리 스크립트로만 제한 할 수있는 솔루션이 있습니까? 예를 들어 /home/rpcall/bin/command.sh

이 사용자를 위해 bash 쉘을 설정하고 .bashrc force run 처리 스크립트를 사용했지만 ssh 호출에서 매개 변수를 전달하는 방법을 모르겠습니다.

rpcall 사용자를위한 .bashrc

/home/rpcall/bin/command.sh $params1 $params2
exit

다른 컴퓨터에서 ssh 호출

ssh -l rpcall 192.168.12.1 "param1" "param2"


답변

certified_keys 파일을 사용하여 명령을 제한 할 수 있습니다. command="/home/rpcall/bin/command.sh"authorized_keys 파일에서 키 앞에 두면 사용자는 연결할 때만 해당 명령을 실행합니다.

authorized_keys에 대한 매뉴얼 페이지를 확인하십시오. 이것은 해당 매뉴얼 페이지에서 가져온 것입니다.

 command="command"
         Specifies that the command is executed whenever this key is used
         for authentication.  The command supplied by the user (if any) is
         ignored.  The command is run on a pty if the client requests a
         pty; otherwise it is run without a tty.  If an 8-bit clean chan-
         nel is required, one must not request a pty or should specify
         no-pty.  A quote may be included in the command by quoting it
         with a backslash.  This option might be useful to restrict cer-
         tain public keys to perform just a specific operation.  An exam-
         ple might be a key that permits remote backups but nothing else.
         Note that the client may specify TCP and/or X11 forwarding unless
         they are explicitly prohibited.  The command originally supplied
         by the client is available in the SSH_ORIGINAL_COMMAND environ-
         ment variable.  Note that this option applies to shell, command
         or subsystem execution.

둘 이상의 명령이 필요한 경우 기본적으로 여러 키 세트를 설정하고 다른 키를 사용하여 다른 명령을 제공해야합니다.

편집 : 방금 원래 명령을 SSH_ORIGINAL_COMMAND환경 변수 에서 사용할 수 있으므로 실제로 스크립트를 사용하여 입력을 처리하고 영리한 작업을 수행 할 수 있음을 알았습니다 .