Bash
通過 ssh 執行遠端命令擺脫“stdin:不是 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。這只是我不想看到的登錄消息。
我剛剛找到了解決方法。
而不是寫
#! /bin/bash ssh root@srv01 << 'STOP_SERVER' date touch /tmp/testFile STOP_SERVER
寫下
#! /bin/bash ssh root@srv01 ' date touch /tmp/testFile '
沒有問題了。