scp 'ad port ' 22 问题解决办法

网友投稿 1220 2022-09-21

scp 'ad port ' 22 问题解决办法

scp 'ad port ' 22 问题解决办法

在写一个scp推送文件脚本的时候遇到的问题

脚本

# cat test.sh #!/bin/bash IP=`head -1 hosts.txt|tail -1|awk -F" " '{print $1}'` PORT=`head -1 hosts.txt|tail -1|awk -F" " '{print $2}'` scp -P ${PORT} -r $1 ${IP}:/tmp

执行结果

# sh test.sh /tmp/yum.log 'ad port '22 lost connection

hosts.txt文件内容

# cat hosts.txt  192.168.0.103 22

原因分析

开启shell调试选项,执行结果如下

# sh -x test.sh /tmp/yum.log ++ awk '-F ' '{print $1}' ++ tail -1 ++ head -1 hosts.txt + IP=192.168.0.103 ++ awk '-F ' '{print $2}' ++ tail -1 ++ head -1 hosts.txt + PORT=$'22\r' + scp -P $'22\r' -r /tmp/yum.log 192.168.0.103:/tmp yum.log 'ad port '22 lost connection

奇怪为什么会PORT=$'22\r',百度$'\r'遇到这种问题还不少,\r是windows的换行符,问题可能出在这里hosts.tx文件是我从windows下写的,而后上传到linux;由于$2是最后一个字段所以$2包含了\r

解决办法

方法一:在hosts.txt文件内容的每一行后添加一个空格

方法二:安装dos2unix

# yum install dos2unix -y ... # dos2unix hosts.txt  dos2unix: converting file hosts.txt to UNIX format ...

再次执行脚本成功

# sh -x test.sh /tmp/yum.log  ++ awk '-F ' '{print $1}' ++ tail -1 ++ head -1 hosts.txt + IP=192.168.0.103 ++ awk '-F ' '{print $2}' ++ tail -1 ++ head -1 hosts.txt + PORT=22 + scp -P 22 -r /tmp/yum.log 192.168.0.103:/tmp yum.log

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:zabbix邮件监控配置
下一篇:Python 整数数据类型详解(int)[学习 Python 必备基础知识][看此一篇就够了](python中布尔类型的值是)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~