温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

scp 'ad port ' 22 问题解决

发布时间:2020-06-20 03:46:19 来源:网络 阅读:601 作者:子雨影 栏目:系统运维

在写一个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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI