Ubuntu 中,采用 scp 命令可以在不同服务器之间进行文件复制.

用法:

# 文件复制
scp local_file username@ip:/server_path

# 文件夹复制
scp local_filepath username@ip:/server_path

注:scp 命令每次都需要输入密码.

1. 设置无密码从主机 A 到主机 B 的文件复制

[1] - 在主机 A 生成配对密钥:

ssh-keygen -t rsa

/home/username/.ssh 路径生成两个文件:私有密钥-id_rsa和公共密钥- id_rsa.pub.

[2] - 重命名id_rsaid_rsa.pub,以便于标识.

mv id_rsa id_rsa_serverB
mv id_rsa.pub id_rsa_serverB.pub

[3] - scp生成的密钥 id_rsa_serverB.pub 到主机 B 的 /home/username/.ssh 路径:

scp /home/username/.ssh/id_rsa_serverB.pub username@ip:/home/username/.ssh/

此时还需要输入密码.

[4] - 在主机 B 中,将 id_rsa_serverB.pub 内容追加注入到主机 B 的authorized_keys 文件中:

cat /home/username/.ssh/id_rsa_serverB.pub >> /home/username/.ssh/authorized_keys

完成后,则主机 A 到主机 B 的文件拷贝复制就不需要输入密码了.

注: 主机 A 和主机 B 一定要有相同的用户.

2. 定时备份主机 A 数据到主机 B

参考:通过Shell脚本自动定时将Gitlab备份文件复制到远程服务器

2.1 备份 shell 脚本

auto_backup.sh:

#!/bin/bash

# 本地路径
LocalBackupDir=/path/to/local_dir (自行指定)

# 本地文件
LocalBackupFile=$LocalBackupDir/backup_file (自行指定)

# 服务器中备份文件保存路径
RemoteBackupDir=/path/to/server_backup_dir (自行指定)

# 服务器 IP 地址
RemoteIP= server_ip(自行指定)

# 服务器登录账户
RemoteUser=username (指定用户名,如,root, username)

# 当前系统日期
DATE=`date +"%Y-%m-%d"`

# 本地 Log 存放路径
LogFile=$LocalBackupDir/log/$DATE.log

# 新建日志文件
touch $LogFile

# 追加日志到日志文件
echo "Auto backup LocalFile to remote server" >>  $LogFile
echo "Start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
echo "-------------------------------------" >> $LogFile

# 输出日志,打印出每次scp的文件名
echo "The file to scp to remote server is: $LocalBackupFile " >> $LogFile
echo "-------------------------------------" >> $LogFile

#备份到远程服务器
scp $LocalBackupFile $RemoteUser@$RemoteIP:$RemoteBackupDir

#追加日志到日志文件
echo "-------------------------------------" >> $LogFile

2.2 crontab 定时执行脚本

Ubuntu - crontab 命令定时执行任务 - AIUAI

编辑 etc/crontab 文件,添加要执行的任务:

sudo vim /etc/crontab

未添加备份任务 前的文件内容:

# /etc/crontab: system-wide crontab     
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

/etc/crontab尾部添加备份任务的shell 脚本: - auto_backup.sh

# 添加定时计划任务,每天 2:00,执行脚本
0  2  * * *  username /path/to/auto_backup.sh
Last modification:December 14th, 2018 at 02:16 pm