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_rsa
和 id_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
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 定时执行脚本
编辑 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