最近在折腾NAS小主机,无意中发现unraid这个nas系统还比较好用,可扩展性强,于是想折腾在unraid上也能实现https访问。由于我的其它主机已经安装了Nginx(用lnmp.org一键脚本搭建)并申请了可自动更新的证书,于是就想能不能直接拷贝已经生成的泛域名ssl证书到nas中使用。不过因为我对linux一知半解,搜索学习了好久,才发现还是有办法实现的——想办法将远程主机上的ssl证书定期拷贝到本地主机——于是就有了写这篇文章的想法,一是给自己作个备忘,二也可以给跟我一样的小白作一些参考。
假设我的已安装lnmp并申请ssl证书的主机为主机1,申请的ssl证书保存目录为/usr/local/nginx/conf/ssl/xxx.com;nas主机为主机2,欲保存备份ssl证书的目录为/mnt/user/appdata/ssl/xxx.com。
原理:通过把本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中,然后通过scp命令实现不输入密码远程复制文件(夹)
1、在主机1上申请ssl证书,略(可参考我的另外一篇博文:利用lnmp一键安装包配置自动更新的免费SSL证书)
2、在主机2上生成主机2用户的ssh公匙文件(ssh到主机2运行如下命令):
ssh-keygen -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:B34c6RaitTlUrpKZH7RQ4+48O7pME/ORXmchKFYn9** root@8259U
The key's randomart image is:
+---[RSA 3072]----+
| o.+. |
| . +Eo |
| o + o o |
| . + = o . |
| + S * o |
| ^ & = |
| O % * |
| o *o= |
| +o=+ |
+----[SHA256]-----+
root@8259U:~#
会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub
3、将把主机2刚生成的id_rsa.pub文件拷贝到主机1的root用户主目录下的.ssh目录下,并且改名为authorized_keys:以root用户ssh进入主机1运行如下命令回车(假设主机2的ip为192.168.28.107)
scp root@192.168.28.107:/root/.ssh/id_rsa.pub ./.ssh/authorized_keys,然后按提示输入主机2的root用户密码,公匙文件即已复制到主机1:
4、现在即可无需输入主机1的密码复制所需的ssl证书文件了。
ssh进入主机2,然后输入如下命令(假设主机1的ip为192.168.28.225)
scp -r root@192.168.28.225:/usr/local/nginx/conf/ssl/xxx.com /mnt/user/appdata/ssl/
则主机1中/usr/local/nginx/conf/ssl/xxx.com文件夹下的ssl证书将全部复制到主机2/mnt/user/appdata/ssl/xxx.com文件夹下了!
==几点说明:==
1、如果有多台计算机需要与主机1进行复制,则只需将id_rsa.pub中的内容复制到authorized_keys文件中即可。
即先执行scp拷贝程序将每台计算机的id_rsa.pub文件拷贝到主机1的root用户主目录下的.ssh目录下并改名为1.pub,2.pub,....n.pub,再执行cat ~/.ssh/1.pub >> ~/.ssh/authorized_keys, cat ~/.ssh/2.pub >> ~/.ssh/authorized_keys,...cat ~/.ssh/n.pub >> ~/.ssh/authorized_keys, 将内容追加进去即可。
2、scp常用命令:
复制文件:
(1)将本地文件拷贝到远程
scp 文件名 用户名@计算机IP或者计算机名称:远程路径
(2)从远程将文件拷回本地
scp 用户名@计算机IP或者计算机名称:文件名 本地路径(要有/结尾)
复制目录:
(1)将本地目录拷贝到远程
scp -r 目录名 --用户名@计算机IP或者计算机名称:远程路径
(2)从远程将目录拷回本地
scp -r 用户名@计算机IP或者计算机名称:目录名 本地路径(要有/结尾)