[ SHELL编程 ] 远程服务器传输文件
在shell编程中经常需要获取远程服务器文件。手工操作中使用scp命令完成。为避免脚本执行scp输入密码进行交互,需先建立本机服务器当前用户和远程服务器指定用户的信任关系。具体代码见操作实例,重点关注getRemoteServerFile()函数,编程中可单独提取使用。
基础知识
1、scp,用于远程文件拷贝
#本地文件或目录上传到远程服务器,文件和目录用绝对路径
scp local_file remote_username@remote_ip:remote_dir
scp local_file remote_username@remote_ip:remote_file
scp -r local_dir remote_username@remote_ip:remote_dir #远程服务器文件或目录下载到本地,文件和目录用绝对路径
scp remote_username@remote_ip:remote_file local_dir
scp remote_username@remote_ip:remote_file local_file
scp -r remote_username@remote_ip:remote_dir local_dir 其他常用参数介绍:
-B 使用批处理模式,可用于判断两个服务器间是否已建立信任关系
-p 保留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh()会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
2、ssh远程执行命令。特别注意,执行命令建议用绝对路径,如路径中涉及环境变量,建议重新source环境配置文件。
ssh remote_username@remote_ip 'command' #不指定关口,默认22
ssh -p $port remote_username@remote_ip 'command' #指定端口
3、md5sum,用来计算和校验文件报文摘要的工具程序,确保文件传输完整性。
md5sum filename
4、stat,获取文件的状态信息。可以通过比较源文件和目标文件大小一致性验证传输完整性。
stat -c %s filename
设计思路
1、利用createSSH脚本创建两个服务器间的信任关系,createSSH脚本来自创建SSH信任关系。这一步骤在代码中未体现。
2、利用scp命令进行传输文件;
3、利用md5sum命令判断下载文件的完整性。如果一致,判定下载成功,否则,为失败。
使用方法
1、使用创建SSH信任关系脚本完成与远程服务器信任关系的创建,也可以在脚本中添加调用createSSH。
2、将下面代码拷贝放入Linux服务器上getRemoteServerFile.sh文件,并赋可执行权限。
3、执行./getRemoteServerFile.sh 用户名 用户IP 待下载文件绝对路径 本地保存目录
代码如下:
#!/bin/bash #*************************************************
#*** Author : lion
#*** Create Date : //
#*** Modify Date : NA
#*** Function : get file from remote server
#************************************************* function getRemoteServerFile()
{
if [ $# -ne ];then
printf "Call the function of getRemoteServerFile fail.\n"
return
fi local remote_server_ip=$
local remote_username=$
local remote_file_abspath=$
local local_download_directory=$
local filename=$(basename ${remote_file_abspath}) #check file exist or not
ssh ${remote_username}@${remote_server_ip} "ls ${remote_file_abspath}" &>/dev/null
[ $? -ne ] && return
source_md5sum_value_temp=$(ssh ${remote_username}@${remote_server_ip} "md5sum ${remote_file_abspath}")
source_md5sum_value=$(echo ${source_md5sum_value_temp} | awk '{print $1}')
scp ${remote_username}@${remote_server_ip}:${remote_file_abspath} ${local_download_directory}
dest_md5sum_value=$(md5sum ${local_download_directory}/${filename} | awk '{print $1}') [ ${source_md5sum_value} == ${dest_md5sum_value} ] && return || return
} ##main if [ $# -ne ];then
printf "Usage:$(basename $0) remote_server_ip remote_username remote_file_abspath local_download_directory\n"
exit
fi remote_server_ip=$
remote_username=$
remote_file_abspath=$
local_download_directory=$
[ $? -ne ] && exit
getRemoteServerFile ${remote_server_ip} ${remote_username} ${remote_file_abspath} ${local_download_directory}
if [ $? -eq ];then
printf "Download file success.\n"
exit
else
printf "Download file fail.\n"
exit
fi
[ SHELL编程 ] 远程服务器传输文件的更多相关文章
- shell实践(一)---判断远程服务器中文件是否存在
1.判断一个文件的常见形式为 if [ -f filename ] #此处有-e和-f的区别 注意: 1)中括号之间的空格: 2)filename最好是绝对路径,在判断远程服务器中文件是否存在时尤为 ...
- Android网络编程只局域网传输文件
Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...
- win7系统远程连接其它计算机,并且向远程机传输文件
首先,打开开始菜单,在程序自带的 “附件“ 中找到 "远程桌面连接"并打开,出现远程桌面对话框: 其次,在对话框左下角点击“选项”,选择“本地资源对话框”,在本地设备和资源下点击“ ...
- 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序
最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享. PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI ...
- Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)
本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...
- mac 使用命令行,对远程服务器进行文件更新
目的:更新服务器文件A 1.远程传输文件 A.zip 在本地A文件的父级文件夹下执行 scp ./A.zip 远程服务器用户名@远程服务器IP:/要放置的文件夹目录/ 然后要输入服务器登陆密码,进行文 ...
- Ubuntu 16.04 安装ftp服务器传输文件
最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器.往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件.像我这样一个linux菜逼,这种要求不是 ...
- 本机向windows服务器传输文件的三种方法
闲来无事,在腾讯云上申请了一个免费的服务器,想将自己写的网页发布到服务器上,服务器的申请很简单,百度搜索 腾讯云 ,然后新人第一次注册能申请到免费一个月的云主机,虽然配置不怎么高,但是还是能用的,这是 ...
- [Linux] scp本地服务器和远程服务器拷贝文件
上传本地文件到服务器scp 本地路径 用户名@远程服务器ip:远程路径 下载文件 scp 用户名@远程服务器ip:远程路径 本地路径-r 是上传下载本地目录到远程 远程文件
随机推荐
- CAP在MySQL的分析
此文转载在登博的文章,给大家分享 问题一:数据一致性.在不使用共享存储的情况下,传统RDBMS(例如:Oracle/MySQL/PostgreSQL等),能否做到在主库出问题时的数据零丢失. 问题二: ...
- 数据分箱:等频分箱,等距分箱,卡方分箱,计算WOE、IV
转载:https://zhuanlan.zhihu.com/p/38440477 转载:https://blog.csdn.net/starzhou/article/details/78930490 ...
- C语言:传值,传地址
形参:形式参数实参:实际参数 传值: 把实参的值复制给形参, 修改函数内的形参,不会影响实参. 传地址: 指针传值,形参为指向实参地址的指针 当对形参的指向操作时,相当于对实参本身进行的操作 #inc ...
- Java 8- Java 分支结构 - if…else/switch
Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java有两种分支结构: if语句 switch语句 if语句 一个if语句包含 ...
- Android 打开高德地图、百度地图进行导航;打开第三方App去导航;
抽成工具类了,复制下来就能直接用了,直接看代码吧: 高德地图Url Api: http://lbs.amap.com/api/amap-mobile/guide/android/navigation ...
- CSS浏览器兼容性与解决
一.超链接访问后hover样式不出现 1.现象描述: 同时设置了a:visited和a:hover样式,但一旦超链接点击过后,hover的样式就不再出现了. 2.解决方法: 调整样式顺序为先a:vis ...
- day6作业(元组,字典,集合)
默写: 1.元组 字典 集合 列表 各自的特点 2.字典添加 删除 修改 循环 必做: 1.餐厅提供了五种不同的菜,使用元组来存储他们,并循环打印出所有菜名,要求用户输入新加的菜名,加入到菜单中,并重 ...
- Element-UI安装和项目开发
方法一:引入CDN 使用起来最简单的方法,直接引入CDN就可以工作了 <!-- 引入样式 --> <link rel="stylesheet" hre ...
- python之格式化输出(3种方式)
python3.6后支持3种格式化输出方式,其中前两种为%-formatting及str.format ,第三种即为 f-string. 1.%-formatting 据传该格式化方法源于C.. &g ...
- spring揭密学习笔记(1) --spring的由来
1.spring起源于在EJB暴露出各种严重问题的情况应运而生. Spring是于2003年兴起的一个轻量级的Java开发框架, Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解 ...