将预定义的 ssh 脚本升级为远程计算机实施

将预定义的 ssh 脚本升级为远程计算机实施

问题是我想在不使用密码的情况下从计算机 A 到计算机 B 运行某些 ssh 命令(或脚本)。

例子:

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

我也想尽可能安全地做到这一点。如果我只是打开一个终端,我应该无法 ssh 到 computerB。显然无法编辑脚本/程序并随后运行它们。

我正在考虑使用 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

相关内容