我正在尝试对几台服务器进行 SSH 连接,并尝试获取每台服务器的 sudo -l
输出。
下面是我正在执行的脚本
#!/bin/bash
serverlist="/tmp/servers"
while IFS=, read -r server netgroup username user
do
ssh -tt -q root@$server sudo -U $username -l < /dev/null
done < "$serverlist"
我发现该脚本中的 -tt
选项是导致此错误的原因。对此有什么想法吗?
我还注意到,当我仅为 1 台服务器执行以下命令时,我没有看到此错误。
ssh -tt -q root@myserver sudo -U cham01 -l
以下是我收到的完整错误消息: tcgetattr: Inappropriate ioctl for device
原文由 Chamara Keragala 发布,翻译遵循 CC BY-SA 4.0 许可协议
tcgetattr: Inappropriate ioctl for device
通常 表示某些程序试图进行终端控制操作,但其标准 I/O 流未连接到终端。 (我知道这一点是因为tcgetattr
是执行终端控制操作的 C 库函数的名称。)现在,
-tt
选项到ssh
的全部意义在于保证远程主机 上 运行的程序连接到终端,并且stty
打印出来speed 38400 baud; line = 0; -brkint -imaxbel
证明它 是.这是 我 在服务器上运行这些命令时得到的结果:但是你得到的是
tcsetattr
错误 不是 来自stty
。首先有些东西试图做一些与终端相关的事情但失败了, 然后stty
运行成功。这表明您的 shell 启动脚本中存在错误,该错误在“非交互式”运行时执行了不适当的操作, 即使 您 正在 运行连接到终端的命令,也会导致您收到此错误。我不能再帮你了,但也许 这个关于类似问题的旧答案 提供了一些线索。