我尝试通过ssh运行本地脚本,需要使用sudo权限。
ssh $HOST < script.sh
我尝试过
ssh -t $HOST "sudo -s && bash" < script.sh
实际上,我在谷歌上搜索了很多,找到了一些类似的问题,但是我没有找到可以sudo运行本地脚本的解决方案。
阅读错误消息
$ ssh -t $HOST "sudo -s && bash" < script.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
很明显这里出了问题。
你不能在将脚本重定向到远程会话的bash标准输入时使用ssh参数-t
(这是sudo
需要请求密码的)。
如果可以接受,你可以通过scp
将本地脚本传输到远程机器上,然后执行脚本而无需进行I/O重定向:
scp script.sh $HOST:/tmp/ && ssh -t $HOST "sudo -s bash /tmp/script.sh"
解决此问题的另一种方法是在非交互模式下使用sudo -n
,但是您需要在远程机器的sudoers文件中为执行用户设置NOPASSWD
。然后您可以使用该命令。
ssh $HOST "sudo -n -s bash" < script.sh
newscript="runlocalscriptonremotehost.sh"
touch $newscript && chmod +x $newscript && nano $newscript
HOSTtoCONTROL="sudoadmin@192.168.0.254"
PATHtoSCRIPT="/home/username/Scripts/"
SCRIPTname="scripttorunremotely.sh"
scp $PATHtoSCRIPT$SCRIPTname $HOSTtoCONTROL:/tmp/ && ssh -t $HOSTtoCONTROL "sudo -s bash /tmp/$SCRIPTname"
sh ./runlocalscriptonremotehost.sh
&&
将两个命令组合起来。 x_cmd && y_cmd
的作用是在x_cmd
成功退出后执行y_cmd
。