在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编程 ] 远程服务器传输文件的更多相关文章

  1. shell实践(一)---判断远程服务器中文件是否存在

    1.判断一个文件的常见形式为 if [ -f filename ]  #此处有-e和-f的区别 注意: 1)中括号之间的空格: 2)filename最好是绝对路径,在判断远程服务器中文件是否存在时尤为 ...

  2. Android网络编程只局域网传输文件

    Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...

  3. win7系统远程连接其它计算机,并且向远程机传输文件

    首先,打开开始菜单,在程序自带的 “附件“ 中找到 "远程桌面连接"并打开,出现远程桌面对话框: 其次,在对话框左下角点击“选项”,选择“本地资源对话框”,在本地设备和资源下点击“ ...

  4. 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序

    最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享. PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI ...

  5. Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)

    本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...

  6. mac 使用命令行,对远程服务器进行文件更新

    目的:更新服务器文件A 1.远程传输文件 A.zip 在本地A文件的父级文件夹下执行 scp ./A.zip 远程服务器用户名@远程服务器IP:/要放置的文件夹目录/ 然后要输入服务器登陆密码,进行文 ...

  7. Ubuntu 16.04 安装ftp服务器传输文件

    最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器.往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件.像我这样一个linux菜逼,这种要求不是 ...

  8. 本机向windows服务器传输文件的三种方法

    闲来无事,在腾讯云上申请了一个免费的服务器,想将自己写的网页发布到服务器上,服务器的申请很简单,百度搜索 腾讯云 ,然后新人第一次注册能申请到免费一个月的云主机,虽然配置不怎么高,但是还是能用的,这是 ...

  9. [Linux] scp本地服务器和远程服务器拷贝文件

    上传本地文件到服务器scp 本地路径 用户名@远程服务器ip:远程路径 下载文件 scp 用户名@远程服务器ip:远程路径 本地路径-r 是上传下载本地目录到远程 远程文件

随机推荐

  1. 一次线上zabbix server 挂掉的思考

    突然间发现zabbix 挂了,咋发现的呢?报警的世界突然安静了,你就会觉得不妥了.这是运维人员的通病,有报警嫌烦,没报警心里会不安.1,图形界面上确实显示zabbix server is not ru ...

  2. Mybatis 系列9-强大的动态sql 语句

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  3. css一般性

    1. 总差那么几像素!line-height:100%;2. 数据图片,产品图片用img 小图标,logo,修饰网站的图片 用背景3.文字居中 line-height /text-align:cent ...

  4. 01-Socket服务器

    package com.day1; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOExc ...

  5. 通过创建临时表合并某一个库的hive小文件

    #!/bin/bash #需要指定hive中的库名 #set -x set -e DB=$1 if [ -z $1 ];then echo "Usage:$0 DbName" ex ...

  6. 第8课 列表初始化(3)_防止类型收窄、explicit关键字

    1. 防止类型收窄 (1)类型收窄:指的是导致数据内容发生变化或者精度丢失的隐式类型转换. (2)类型收窄的几种情况: ①从浮点数隐式转换为整型数,如int i=2.2; ②从高精度浮点数隐式转换为低 ...

  7. Chapter2:Qt5模板库,工具类及控件

    2.1 字符串类 QString类保存16位Unicode值,提供了丰富的操作,查询和转换等函数.  (1):QString提供了一个二元的"+"操作符用于组合两个字符串  (2) ...

  8. nodejs中mysql用法

    nodejs也算是一篇脚本了我们来看nodejs如何使用mysql数据库了有了它们两组合感觉还是非常的不错哦,下面一起来看nodejs中使用mysql数据库的示例,希望能够帮助到各位. <scr ...

  9. servlet为什么会出现?servlet有什么作用?

    在面试中遇到了这个问题,所以想总结一下,所以上网找了一下,主要是网上的一些我觉得比较合理的解释: servlet为什么会出现? Servlet = Service + Applet,表示小服务程序.S ...

  10. Python NLTK——代码重用,F5运行py文件cmd闪退,invalid syntax

    打开IDLE,对代码进行保存(Ctrl+S)后,代码都是可以运行的. 但是打开文件就会弹出cmd并闪退,截了好几次图发现报的是Invalid syntax的错. 后来发现应该在IDLE中新建一个fil ...