之前在写一个脚本的时候,脚本里面需要批量化远程登陆主机进行操作,认识执行时遇到了tcgetattr: Inappropriate ioctl for device报错
之前用来测试的脚本:

#!/bin/bash
ssh -tt 主机名/主机ip > /dev/null << EOF
        chongfu=`处理的命令 | awk 'NR%3==0' | awk '{print $2}' | uniq -d`
        [ -z "$chongfu" ] && {
                echo "`hostname` has no the same host"
        } || {
                echo "`hostname` the same name is $chongfu"
                }
        exit
EOF

这里的执行就会出现我们所说的报错,最后分析可能出现的问题就是ssh远程登录主机后可能并不能执行太多的复杂的逻辑。所以我们在这里将这个脚本拆开,将执行逻辑写在一起,然后scp到远程主机上,然后在远程主机执行脚本即可
处理脚本:test.sh

#!/bin/bash
chongfu=`处理的命令 | awk 'NR%3==0' | awk '{print $2}' | uniq -d`
[ -z "$chongfu" ] && {
        echo "`hostname` has no the same host"
} || {
        echo "`hostname` the same name is $chongfu"
        }

执行脚本:act.sh

#!/bin/bash
scp ./test.sh 远程主机名/IP:/tmp &> /dev/null
ssh 远程主机名 "/bin/bash /tmp/test.sh"
ssh 远程主机名 "/bin/rm -f /tmp/test.sh"

这样,我们就巧妙的避免了ssh的交互命令不能太复杂的问题。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐