问题是我想在不使用密码的情况下从计算机 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