尝试SSH时,设备的ioctl不合适

Cha*_*ala 5 linux ssh bash scripting

我正在尝试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"
Run Code Online (Sandbox Code Playgroud)

我发现-tt此脚本中的选项是导致此错误的原因.有什么想法吗?

此外,我已经注意到,当我执行以下命令仅为1服务器时,我没有看到此错误.

ssh -tt -q root@myserver sudo -U cham01 -l

以下是我得到的完整错误消息: tcgetattr: Inappropriate ioctl for device

zwo*_*wol 7

tcgetattr: Inappropriate ioctl for device 通常意味着某些程序试图进行终端控制操作,但其标准I/O流未连接到终端.(我知道这是因为tcgetattr是执行终端控制操作的C库函数的名称.)

现在,整点-tt选项ssh是为了保证在远程主机上运行的程序连接到终端,并stty打印出speed 38400 baud; line = 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.
Run Code Online (Sandbox Code Playgroud)

但你得到的是

$ ssh -tt yourserver stty < /dev/null
tcsetattr: Inappropriate ioctl for device
speed 38400 baud; line = 0;
-brkint -imaxbel
Run Code Online (Sandbox Code Playgroud)

tcsetattr错误是不是来自哪里stty.首先尝试做与终端相关的事情并失败,然后 stty成功运行.这表明在你的shell启动脚本,它正在做的事情跑"非交互"时是不合适的错误,导致您收到此错误,即使正在运行的连接到终端的命令.我无法再帮助你了,但也许这个关于类似问题的旧答案提供了一些线索.