事前定義されたSSHスクリプトをリモートシステム実装にアップグレードする

事前定義されたSSHスクリプトをリモートシステム実装にアップグレードする

問題は、パスワードを使用せずにコンピュータAからコンピュータBにいくつかのSSHコマンド(またはスクリプト)を実行したいということです。

例:

ssh apple@computerB 'poweroff'
ssh apple@computerB "killall firefox; systemctl enable apache; firefox"
ssh apple@computerB < superscript.txt

私もできるだけ安全にこの仕事をしたい。端末を開くと、コンピュータBにSSHで接続できないはずです。明らかに、スクリプト/プログラムを編集して後で実行する方法はありません。

SUIDとSSHキーを持つ他のユーザーを使用してシステムにアクセスしようとしていますが、SUIDとスクリプトの解釈にはセキュリティ上の問題があります。

誰でもどんな提案がありますか?

答え1

SSHホストにSUIDプログラムをインストールするのではなく、必要な権限を持つユーザーとして接続しますが、特定のコマンドをそのキーにバインドします。

ターゲットユーザーのファイル.ssh/authorized_keysでこれを行います。例えば、

command="poweroff" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJQwKcn2AJxNpuzRM/SfJLn0UEXCMmAmI2Xdqeng4nB9 saft@home

複数のコマンドのいずれかを使用するには、適切に解釈されたスクリプトを使用できます$SSH_ORIGINAL_COMMAND

#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
  poweroff)
    exec poweroff
    ;;
  firefox)
    killall firefox; systemctl enable apache; exec firefox
    ;;
  *)
    printf '%s\n' >&2 \
        "Unrecognised command `$SSH_ORIGINAL_COMMAND'" \
        'Valid commands are:' \
        ' * poweroff' \
        ' * firefox'
    exit 1
    ;;
esac

関連情報