通过 ssh 远程执行命令摆脱“stdin: is not a tty”

通过 ssh 远程执行命令摆脱“stdin: is not a tty”

问题出在 Debian Jessie 服务器上。

我使用 ssh 运行远程命令,如下例所示。

#! /bin/bash
ssh root@srv01  << 'STOP_SERVER'
    touch /tmp/testFile
STOP_SERVER

这很有效,只是我得到了很多我不想要的输出。这是一个用星星替换敏感信息的示例。

root@home:~# ./test.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
Linux srv01.***.*** 3.14.32-xxxx-grs-ipv6-64 #5 SMP Wed Sep 9 17:24:34 CEST 2015 x86_64 GNU/Linux

server    : ***
ip        : ***
hostname  : srv01.***.***

stdin: is not a tty

如果我将脚本更改为以下内容

#! /bin/bash
ssh root@srv01  << 'STOP_SERVER' >> /dev/null
    touch /tmp/testFile
STOP_SERVER

我得到以下输出

root@home:~# ./test.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
stdin: is not a tty

如果我将选项 -q 添加到 ssh 命令中,我会得到

root@home:~# ./test.sh
stdin: is not a tty

这就是我陷入困境的地方,因为我不知道如何重新编织stdin: is not a tty

我希望我可以避免输出重定向到 /dev/null。这只是我不想看到的登录消息。

答案1

我刚刚找到了修复方法。

而不是写作

#! /bin/bash
ssh root@srv01  << 'STOP_SERVER'
    date
    touch /tmp/testFile
STOP_SERVER

写下以下内容

#! /bin/bash
ssh root@srv01  '
date
touch /tmp/testFile
'

不再有问题了。

相关内容