如何sudo在ssh上运行本地脚本

时间:2017-07-05 02:50:57

标签: linux shell server

我尝试sudo在ssh上运行本地脚本,

ssh $HOST < script.sh

我试过

ssh -t $HOST "sudo -s && bash" < script.sh

实际上,我在谷歌搜索了很多,发现了一些类似的问题,但是,我找不到可以运行本地脚本的解决方案。

3 个答案:

答案 0 :(得分:1)

阅读

的错误讯息
$ ssh -t $HOST "sudo -s && bash" < script.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.

非常清楚这里出了什么问题。

您无法使用ssh参数-tsudo需要输入密码),同时将您的脚本重定向到bash的远程会话的stdin。

如果您可以接受,可以通过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

答案 1 :(得分:1)

为了使 Edward Itrich 的答案更具可扩展性并适合频繁使用,您可以设置一个系统,在该系统中您只运行一行脚本,该脚本可以通过以下方式快速移植到任何主机、文件或命令:

如果您有一个脚本,请在您的 Scripts 目录中创建一个脚本,方法是更改​​您想要的脚本名称(我经常使用这种格式来更改脚本名称的 1 个单词并创建文件、设置权限并打开以进行编辑) :

newscript="runlocalscriptonremotehost.sh"
touch $newscript && chmod +x $newscript && nano $newscript

在nano中填写如下脚本,将要远程运行的脚本的目录和名称信息放在runlocalscriptonremotehost.sh的变量行中(只需要编辑第1-3行) :

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

在选项卡式文本编辑器中保持 runlocalscriptonremotehost.sh 打开以便快速更新,继续为脚本创建一个 bash 别名,您就拥有了这个常用操作的应用化版本。< /p>

答案 2 :(得分:0)

首先将你的目标分为两部分。 1)ssh给主机。 2)运行你想要的命令作为sudo。在您确定可以1)访问主机并且2)具有sudo权限之后,您可以将这两个命令与&&组合使用。 x_cmd && y_cmd的作用是y_cmdx_cmd成功退出后执行。