在脚本内部运行时通过 ssh 在远程主机上运行命令失败

在脚本内部运行时通过 ssh 在远程主机上运行命令失败

背景:
我的电脑运行的是 Kubuntu 14.04。我是学生宿舍的管理员,宿舍里有一些 Netgear-AP。我的想法是编写一个脚本,通过一个脚本重新启动所有设备。(无法使用 ssh-key)

问题简述:
主机上的 ssh 命令从 shell 中可以正常运行。但如果通过脚本运行则不行。

描述:
我的电脑上有一个脚本:“path/to/localScript”

#!/bin/bash

echo "Hello mister"
reboot

现在如果我直接在 shell 中输入以下内容

    sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] < PATH/TO/LOCALSCRIPT

我得到了输出

Pseudo-terminal will not be allocated because stdin is not a terminal.
Hello mister
Connection to HOST closed by remote host.

AP 确实重新启动了!我尝试了其他命令(如 ping)-> 一切正常。现在我想在脚本中执行完全相同的操作(以便以后也可以添加所有其他 AP ;) )因此我尝试了脚本“rebo​​otThemAll”

#!/bin/bash

echo " Rebooting AP 1"
sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] < PATH/TO/LOCALSCRIPT

我得到了输出

 Rebooting AP1 
Pseudo-terminal will not be allocated because stdin is not a terminal.

然后……什么都没发生。我再次在 shell 行上看到我的输入提示,因此脚本停止。我还尝试了多个 AP,看看该错误是否会取消我的脚本,但没有。对于更多 AP,输出如下所示

 Rebooting AP1
Pseudo-terminal will not be allocated because stdin is not a terminal.
 Rebooting AP2
Pseudo-terminal will not be allocated because stdin is not a terminal.
 Rebooting AP3
Pseudo-terminal will not be allocated because stdin is not a terminal.
 Rebooting AP4
......

但脚本无法运行。它没有显示“Hello mister”,而且他们也没有重新启动。

有人有想法吗?

答案1

尝试这个:

sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] 'bash -s' < PATH/TO/LOCALSCRIPT

看来在根本没有终端的情况下才需要该命令。

(点击此处)

答案2

我可以使用-T选项“禁用伪终端分配”来解决这个问题。并且通过使用没有该#!/bin/bash行的脚本文件,所以刚开始使用

echo "check" 
reboot

相关内容