사전 정의된 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

관련 정보