前面介绍了 scp 命令 Linux 系统间远程拷贝命令 scp 的基本用法,在拷贝的时候均需要输入远程主机的密码,一比较麻烦,二在很多场景下不太适用,比如有一个 shell 脚本是 MySQL 定时备份的,并且会把备份远程拷贝到备份服务器,这时候可以通过在两台服务器建立信任关系来解决。
通过在两台机器的两个用户之间建立安全的信任关系后,可实现执行 scp 命令时不需要输入用户密码。
在 Client 机生成证书
在机器 Client(即本机,主机 ip 为 172.17.207.90)上 root 用户执行 ssh-keygen 命令,生成建立安全信任关系的证书,命令如下
ssh-keygen -b 1024 -t rsa
输入以上命令
在程序提示输入文件位置时直接回车,将生成私钥证书 id_rsa 和公钥证书 id_rsa.pub,存放在用户家目录的。ssh 子目录中
在程序提示输入 passphrase 时直接输入回车,表示无证书密码。
[root@iZ2zefth8eteml1eyueu1sZ ~]# ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:s63mQEMhu/1CFmtL/p/fhllJzSbd6+VzxgSHCNhMZDI root@iZ2zefth8eteml1eyueu1sZ
The key's randomart image is:
+---[RSA 1024]----+
| . . E*+ |
| o ..++ |
| . o . . =.|
| + o . = B|
| . X S . *.|
| B + + o.o|
| = o . +.+.|
| +.. .o..o=|
| o+.o.....o|
+----[SHA256]-----+
拷贝公钥到 Server 机
将公钥证书 id_rsa.pub 复制到机器 Server(即远程主机,主机 ip 为 172.17.207.92)的 root 家目录的。ssh 子目录中,同时将文件名更换为 authorized_keys。采用 scp 命令输入密码完成远程拷贝
[root@iZ2zefth8eteml1eyueu1sZ .ssh]# scp /root/.ssh/id_rsa.pub root@172.17.207.92:/root/.ssh/authorized_keys
root@172.17.207.92's password:
id_rsa.pub 100% 242 547.0KB/s 00:00
[root@iZ2zefth8eteml1eyueu1sZ .ssh]#
拷贝成功,在 Server 机器的。ssh 目录查看
再次测试远程拷贝
再次测试从 Client 机器拷贝 a.txt 到远程机器/home 目录下
[root@iZ2zefth8eteml1eyueu1sZ home]# scp /home/a.txt root@172.17.207.92:/home/c.txt
a.txt 100% 6 4.9KB/s 00:00
[root@iZ2zefth8eteml1eyueu1sZ home]#
可以看到,执行远程拷贝命令,已经不需要输入远程主机的密码了