linux - 尝试 SSH 时设备的 ioctl 不合适

标签 linux bash ssh 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"

我发现此脚本中的 -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/

相关文章:

linux - 为 EC2 Amazon Linux 实例设置 SFTP Sublime Text 3

c++ - 如何从 Linux 上的软件管理器链接到库?

bash 脚本 : echo >> returns error "No such file or directory"

bash - grep 从特定文本 block 中提取字符串

c++ - 查找 Valgrind PID 以调用应用程序

c++ - 在 C++ 中通过 SSH 隧道连接到 MySQL

c - glibc:动态链接器错误的自定义句柄

php - Linux 上有没有免费的 php 网络报告程序?

linux - sshd_config 上允许用户,忘记设置 root

Windows 服务器上的 Laravel SSH