パラメータを使用してSSHリモート実行を制限します。

パラメータを使用してSSHリモート実行を制限します。

サーバーでシェルスクリプトのリモート実行を有効にする必要がありますが、他のすべてのアクセスは拒否する必要があります。スクリプトは、単一のパラメータ(オン/オフ/ステータス)を許可するスイッチです。これ私の質問にほとんど答えましたが、スクリプトをリモートで実行できますが、まだパラメータを渡すことはできません。可能なすべてのパラメータに対して新しいシェルアカウントを作成せずにこれを行う方法はありますか?

デフォルトでは、リモートサーバーで実行できるようにしたいです。

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からの応答はこれを行いますが、シェルスクリプトでは1行のコードでは機能しません。


ソリューションの詳細:

# 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。上記のようなスクリプトを使用できます。

おすすめ記事