Bash

通過 ssh 執行遠端命令擺脫“stdin:不是 tty”

  • October 19, 2020

問題出在 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。這只是我不想看到的登錄消息。

我剛剛找到了解決方法。

而不是寫

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

寫下

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

沒有問題了。

引用自:https://unix.stackexchange.com/questions/615000