我正在尝试通过 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:设备的不适当 ioctl
最佳答案
tcgetattr: Inappropriate ioctl for device
通常 表示某些程序试图执行终端控制操作,但其标准 I/O 流未连接到终端。 (我知道这是因为 tcgetattr
是执行终端控制操作的 C 库函数的名称。)
现在,ssh
的 -tt
选项的全部意义在于保证在远程主机上运行的程序 连接到一个终端,stty
打印出 speed 38400 baud;行 = 0; -brkint -imaxbel
证明它是。这是我在我的服务器上运行这些命令时得到的结果:
$ ssh myserver stty < /dev/null
stty: 'standard input': Inappropriate ioctl for device
$ ssh -tt myserver stty < /dev/null
speed 38400 baud; line = 0;
-brkint -imaxbel
Connection to myserver closed.
但是你得到的是
$ ssh -tt yourserver stty < /dev/null
tcsetattr: Inappropriate ioctl for device
speed 38400 baud; line = 0;
-brkint -imaxbel
tcsetattr
错误不是来自stty
。首先尝试做一些与终端相关的事情但失败了,然后 stty
成功运行。
这表明您的 shell 启动脚本中存在错误,该错误在“非交互式”运行时执行了一些不适当的操作,导致您即使您正在运行时出现此错误连接到终端的命令。我帮不了你了,但也许 this old answer about a similar problem提供了一些线索。
关于linux - 尝试 SSH 时设备的 ioctl 不合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43047175/