在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. 06-001 DependencyInjection 之 LifecycleKind

    IApplicationBuilder 里有如下一成员: IServiceProvider ApplicationServices { get; set; } HttpContext 里有如下两个成员 ...

  2. 【LeetCode】2. Add Two Numbers 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  3. Java 9 - Java Number类

    Java Number类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 实例 int i = 5000; float gpa = 13.65 ...

  4. jquery鼠标放上去显示悬浮层即弹出定位的div层

    <div><a id="a1" onmouseover="javascript:show('a1','div1');" onmouseout= ...

  5. linux:ubuntu安装mysql(二)--推荐

    1)下载mysql安装包mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz,下载地址:https://dev.mysql.com/downloads/mysql/ 2 ...

  6. python学习之----正则表达式

  7. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  8. 简单说明一下Token ,Cookie,Session

    在Web应用中,HTTP请求是无状态的.即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session. Cookie Cookie ...

  9. chattr和lsattr命令的使用(对于root用户也无法修改删除的操作问题)

    1.chattr命令的用法:chattr [+-=] [ASacdistu] File/Directory 参数说明: +-= :分别为 [+ 增加] [- 减少] [= 设定] 属性的意思 A :当 ...

  10. 【Selenium-WebDriver自学】Selenium-IDE验证点(五)

    ==================================================================================================== ...