• 两台linux 之间传输文件 (详细+bash脚本)


    两台linux设备文件直接传输,有很多应用场景

    一、可能的方案

    (一)先下载再上传

    从linux通过ssh下载到windows下,然后再通过ssh上传到另一台linux。

    1.优点:简单
    2.缺点:效率低,需要额外的设备

    (二)http服务器

    比如通过如nginx,需要被下载的设置目录,另一条linux使用wget下载

    1.优点:相对简单
    2.缺点:每次要设置,如果目录设置的太宽泛则安全性堪忧。

    (三)rsync

    rsync搭配一些工具可以实现实时同步,可以参考这篇:
    rsync+lsync实时备份
    单纯的使用rsync比较简单
    1.优点:相对简单
    2.缺点:也是要设置目录,操作不灵活。而且rsync吃资源

    (四)secure copy(scp)

    这个算是比较好的方法,相当于通过ssh直连。

    二、scp具体操作

    1.安装scp

    apt-get install openssh-client
    
    • 1

    dnf install openssh-clients
    
    • 1

    2.具体操作

    设备1:192.168.0.100
    设备2:192.168.0.200

    将本地的文件复制到另一台设备
    将设备1的/aaa目录的file.ini复制到设备2的/bbb目录下,使用root登录:

    scp /aaa/file.ini root@192.168.0.200:/bbb/
    
    • 1

    将另一台设备复制到本地设备
    将设备2的/bbb目录的file.ini复制到本地的/aaa目录下,使用root登录:

    scp root@192.168.0.200:/bbb/file.ini /aaa/
    
    • 1

    第一次连接会提示是否继续连接,选择yes,然后输入密码。之后每次都需要设定密码

    3.自动填写密码的方法

    每次使用都需要重新输入密码,而且需要两次输入
    安装

    apt-get install sshpass
    
    • 1
    yum install sshpass
    
    • 1

    在上面的命令加上sshpass -p ‘password’ ,引号中的password换成登录密码即可

    sshpass -p 'password' scp /aaa/file.ini root@192.168.0.200:/bbb/
    
    • 1

    三、bash脚本

    1.创建脚本文件

    vi /etc/scp.sh
    
    • 1

    注意下面脚本中的常量改为自己的实际情况,下面会有脚本使用方法说明:

    #!/bin/bash
    
    # 常量设置区域(也可以改造成参数)
    remote_ip="192.168.0.200" # 连接的设备地址
    login_user="root" # 登录的账户
    password="aaabbbccc" # 远程root的密码
    
    # 运行区域
    if [ $1 == "send" ];
    then 
    	# 发送文件/文件夹
    	if [ -d "$3/$2" ]; then
    		sshpass -p $password scp -r $3/$2 $login_user@$remote_ip:$4/
    	else
    		sshpass -p $password scp $3/$2 $login_user@$remote_ip:$4/
    	fi	
    elif [ $1 == "get" ]; then
    	# 下载文件/文件夹
    	if [ $5 ]; then
    		if [ $5 == "t" ]; then
    			# 文件夹
    			sshpass -p $password scp -r $login_user@$remote_ip:$4/$2 $3/
    		else
    			# 文件
    			sshpass -p $password scp $login_user@$remote_ip:$4/$2 $3/
    		fi
    	else
    		# 文件
    		sshpass -p $password scp $login_user@$remote_ip:$4/$2 $3/
    	fi
    else
    	echo "请输入传输方式"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    赋予执行权限

    chmod +x /etc/scp.sh
    
    • 1

    2.运行及说明

    我这个脚本这样用
    第一个参数:传输方式,接收(get)还是发送(send)
    第二个参数:文件名或目录名(不带上级目录)
    第三个参数:本地目录(不带后面的/)
    第四个参数:远程目录(不带后面的/)
    第五个参数(可选):上传是否为目录,是t,否f(下载时生效,上传时可以进行本地判断,所以不用写这个参数)


    将file.ini从本地的/aaa目录发送到远程主机的/bbb/下:

    /etc/scp.sh send file.ini /aaa /bbb
    
    • 1

    传输文件夹

    第一次需要先用手动输入一次命令,过了第一个输入yes的提示,后面就可以用脚本了。
    这个脚本可以进一步封装,再被调用。

  • 相关阅读:
    计算机网络中的封装和分用,五层协议
    Cholesterol-PEG-Maleimide,CLS-PEG-MAL,胆固醇-聚乙二醇-马来酰亚胺一种修饰性PEG
    vue3与vue2之全局变量的使用
    MVC第三波书店登录
    MyBatisPlus带你快速入门(1)
    mysql UUID 作为主键的问题
    grafana配置钉钉告警模版(一)
    git push 使用 --mirror 参数复制仓库
    kmeans实现图像像素分类
    web课程设计——健身俱乐部健身器材网站模板(24页)HTML+CSS+JavaScript
  • 原文地址:https://blog.csdn.net/ziqibit/article/details/133818085