当前位置:   article > 正文

使用shell脚本实现无需输入密码远程拷贝文件然后上传至hdfs中_在不知道服务器账号密码的情况下,如何将webshell脚本上传到服务器中

在不知道服务器账号密码的情况下,如何将webshell脚本上传到服务器中

今日需要将一台Web服务器上的用户上传的图片信息上传到hdfs中,由于Web服务器是第三方的,因此不能通过修改应用代码的方式实现,这时就需要将数据拷贝到Hadoop服务器上然后上传至hdfs中,接下来记录下这次的实现过程。
首先需要将对方的数据远程拷贝到Hadoop服务器上,最简便的方式是配置ssh免密码登录然后进行拷贝,但是由于是第三方的服务器,最终还是选用了使用shell和expect实现无需输入密码远程拷贝文件。首先创建了一个拷贝脚本。参考博客:http://blog.itpub.net/27042095/viewspace-745587/

创建一个shell脚本copy.sh,内容如下

	#!/bin/bash
	src_host=192.168.1.110
	src_pwd=apple+APPLE
	src_path=/home/ny/appleAppFile/all.json
	src_user=apple
	expect -c "
	spawn scp -r ${src_user}@${src_host}:${src_path} .
	expect \"password:\"
	send \"${src_pwd}\r\"
	expect eof
	"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

但是路径名展开 是 shell 的特性,expect 没有,上述脚本只能拷贝单个文件,无法递归拷贝整个目录,这时需要对脚本进行修改
首先创建一个scp-r.sh的脚本

#!/bin/bash
scp -r $1 $2
  • 1
  • 2

然后对copy.sh进行一些改动,修改后如下

#!/bin/bash
src_host=192.168.1.110
src_pwd=apple+APPLE
#更改为目录
src_path=/home/ny/appleAppFile/xwzxImg
src_user=root
expect -c "
spawn bash ./scp-r.sh ${src_user}@${src_host}:${src_path} .
expect \"password:\"
send \"${src_pwd}\r\"
expect eof
"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

此时可以远程递归拷贝整个文件夹下的所有内容
然后新建一个定时调度脚本,实现数据拷贝完之后上传到hdfs

#!/bin/bash
bash ./copy-appimg.sh
#判断上一步是否执行完成
if [ $? -eq 0 ]
then
    echo "copy success"
    hadoop fs -put -f xwzxImg /apple/ggfw
    if [ $? -eq 0 ]
    then
        echo "put success"
    else
        echo "put fail"
    fi
else
    echo "copy fail"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

执行脚本之后,检查hdfs中是否有数据,数据上传完成

在这里插入图片描述

创建要给crontab定时任务,每天凌晨2点执行上面的调度脚本,从第三方服务器上拷贝文件然后上传至hdfs中

crontab -e

0 2 * * * /home/apple/crontab.sh
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/736527
推荐阅读
相关标签
  

闽ICP备14008679号