我正在尝试通过 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
tcgetattr: Inappropriate ioctl for device
normally意味着某些程序尝试执行终端控制操作,但其标准 I/O 流未连接到终端。 (我知道这个是因为tcgetattr https://linux.die.net/man/3/tcgetattr是执行终端控制操作的 C 库函数的名称。)
现在,整个要点-tt
选项ssh
是保证程序在远程主机上运行is连接到终端,并且stty
打印输出speed 38400 baud; line = 0; -brkint -imaxbel
表明它was。这是我运行这些命令时得到的结果my服务器:
$ 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
The tcsetattr
错误是not来自(哪里stty
。首先尝试做一些与终端相关的事情但失败了,并且then stty
运行成功。
这表明您的 shell 启动脚本中存在错误,该脚本在“非交互”运行时执行了不适当的操作,导致您收到此错误虽然 you are运行连接到终端的命令。我无法进一步帮助你,但也许这个关于类似问题的旧答案 https://stackoverflow.com/questions/24623021/getting-stty-standard-input-inappropriate-ioctl-for-device-when-using-scp-thro?rq=1提供了一些线索。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)