我有一个禁用 root 登录的 SSH 服务器。我希望运行一个特权命令,该命令需要在执行后从我拥有的文件中输入。我希望通过 oneliner 命令或脚本在没有用户交互的情况下完成所有操作
有密钥身份验证设置,因此仅在运行命令时才需要以下密码。
我得到的最接近的是这个
echo "mypass" |ssh -tt user@ip "sudo specialCommand"
输出看起来像
mypass
[sudo] password for user:
specialCommand requests inputfile contents
mypass 之前打印,也接受密码提示
commandInput
在接受密码后,我有我试图通过管道输入的文件
我的各种尝试都只是一场猜谜游戏,但都失败了,我该如何做到这一点?
怎么样:
或者,既然您显然可以
sudo
访问远程主机,那么如何使用visudo
那里将此行添加到/etc/sudoers
(在授予密码sudo
访问权限的现有行之后user
)的最后?此行授予用户(而不是其他任何人)在没有密码请求的情况下以 root
user
身份运行(而不是其他任何东西)的权限。specialCommand
尝试执行任何其他命令sudo
仍然需要像往常一样输入密码。在此之后,您应该能够简单地执行以下操作:
如果您
specialCommand
并不真正需要 tty,并且您被迫ssh
只为sudo
密码提示制作一个,那么另一种选择是:选项使其从标准输入读取密码
-S
,在这种情况下sudo
来自您的密码echo "mypass"
,而选项-p ''
确保不显示密码提示。然后,您可能希望将密码单独放在一个文件中,并受适当权限的保护。这通常比在脚本中硬连线密码更好。该命令将变为:
在后一种情况下,请确保密码文件恰好是仅包含密码的一行,没有其他内容,否则密码行之后的内容会污染您的
specialCommand
.