两台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

dnf install openssh-clients

2.具体操作

设备1:192.168.0.100
设备2:192.168.0.200

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

scp /aaa/file.ini [email protected]:/bbb/

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

scp [email protected]:/bbb/file.ini /aaa/

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

3.自动填写密码的方法

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

apt-get install sshpass
yum install sshpass

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

sshpass -p 'password' scp /aaa/file.ini [email protected]:/bbb/

三、bash脚本

1.创建脚本文件

vi /etc/scp.sh

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

#!/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

赋予执行权限

chmod +x /etc/scp.sh

2.运行及说明

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


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

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

传输文件夹

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

猜你喜欢

转载自blog.csdn.net/ziqibit/article/details/133818085