#!/bin/bash while read -r line do ssh root@${line} done < /home/babyzhang/ip_list.txt这个脚本执行的时候为什么报错mesg: ttyname failed: Inappropriate ioctl for device -bash: line 1: 192.168.183.130: command not found
时间: 2024-01-28 17:04:52 浏览: 113
这个报错是因为您的脚本执行了一个交互式的 ssh 会话,但是在这种情况下,ssh 会话无法确定终端类型。这导致了错误消息 "mesg: ttyname failed: Inappropriate ioctl for device",并且 ssh 命令无法正确执行。
要解决这个问题,您可以尝试在 ssh 命令中添加 "-t" 选项,以指定一个终端类型。例如:
```
#!/bin/bash
while read -r line
do
ssh -t root@${line} "ls -l /"
done < /home/babyzhang/ip_list.txt
```
这样,ssh 命令就可以正确执行,并且您不会再收到 "mesg: ttyname failed: Inappropriate ioctl for device" 的错误消息。
相关问题
#!/bin/bash filename="/home/yjc/run_result.txt" while read line; do echo "$line" done < $filename
这是一个简单的 Bash 脚本,它会读取一个名为 "/home/yjc/run_result.txt" 的文件,并将文件中的每一行输出到控制台上。
具体来说,这个脚本会使用一个 while 循环来逐行读取文件,然后将每一行存储在变量 $line 中。接着,脚本会使用 echo 命令将 $line 变量的值输出到控制台上。
最后,这个脚本会通过重定向将文件的内容输入到循环中,从而实现逐行读取文件的功能。
如果你有任何关于这个脚本的问题,请随时问我!
#!/bin/bash for i in {1..9}; do ssh-copy-id 10.2.220.10$i; scp /root/.ssh/*10.2.220.10$i:/root/.ssh/; done
这个脚本的作用是通过循环迭代的方式,将本地机器的 SSH 公钥复制到多个远程主机上,并将本地机器的 SSH 密钥文件复制到远程主机。
脚本的具体执行过程如下:
1. 通过循环 `for i in {1..9}` 遍历数字1到9。
2. 在每次循环中,使用 `ssh-copy-id` 命令将本地机器的 SSH 公钥复制到 IP 地址为 10.2.220.10$i 的远程主机上。这将允许您在不需要输入密码的情况下通过 SSH 连接到远程主机。
3. 使用 `scp` 命令将本地机器的 `/root/.ssh/` 目录下的所有文件复制到远程主机的 `/root/.ssh/` 目录下。这将包括 SSH 密钥文件和其他相关文件。
请确保在执行此脚本之前,已在本地机器上生成了 SSH 密钥对,并将公钥添加到远程主机的 `authorized_keys` 文件中。此外,还应确保本地机器和远程主机之间可以通过 SSH 进行连接,并且具有适当的权限来执行这些操作。
阅读全文