点击
搜索 / Search

很久很久以前,我介绍过在多服务器间用 rsync 同步网站证书的方案,一直没更新。但是基本内容没有变化,如果 Let's Encrypt 支持签发泛域名证书了我会考虑重新写一份。当然现在我是不会动手的辣,不过有一点上次没说到——如果你的密钥加密了,那么直接跑那个脚本是不行的。所以这次要解决的就是这个问题。

本次事件的起因是 Xshell 曝出存在后门可能导致登陆用户名密码等信息泄露,虽然我一直是用密钥,但是为了保险起见能换掉的还是换掉比较稳妥。这次换用了 ECDSA 算法,生成和部署就不说了,需要注意的是删掉旧密钥对的时候留一个 ssh 连接,省得打错字连不上机器。然后问题来了,前述证书同步也是靠 ssh 通道传输,但是密钥是加密过的,因此每次建立连接时必须输入密码。我已经忘掉之前是怎么弄的没输密码也一样同步成功了,于是这次必须从头再来。幸亏成熟的解决方案有不少,比如 Keychain。

首先安装,sudo apt install keychain,然后按需求配置密码缓存。按照 ArchWiki 的办法,我选择在第一次连接时需要输入密码启动ssh-agent进程守护。向~/.bashrc中添加如下内容:

alias ssh='eval $(/usr/bin/keychain --eval --agents ssh -Q --quiet ~/.ssh/id_ecdsa) && ssh'

如果没有把公钥扔进.ssh中,第一次 ssh 连接其他机器可能会提示找不到公钥,无视即可,然后添加缓存:

ssh-add ~/.ssh/id_ecdsa

这步不清楚是否必须,因为 wiki 上也没写清楚,但在我这里需要缓存一次密码。这样就可以正常免密码使用 ssh 方式同步文件了。

那么等淘到更大的固态的时候就换 WSL,原生方案并没有什么不好(还是淘个洋垃圾 ThinkPad 装 Linux 清真)。

参考资料:

  1. https://wiki.archlinux.org/index.php/SSH_keys_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
  2. https://eason-yang.com/2016/09/09/use-rsync-to-sync-letsencrypt-certifications-with-remote-server/
声明: 本站所有图文遵循 署名-非商业性使用-相同方式共享 3.0 共享 协议.
转载请注明转自 ershiwo的私人研究所
标签:

5 Comments

  1. zhuisui

    有一样东西叫 expect

    2017.08.21 at 23:22
    #1  
    • 但是 expect 会泄露明文密码(

      2017.08.22 at 00:01
      #11
      • zhuisui

        放在自己的电脑上有什么关系

        2017.08.22 at 22:42
        #12
        • 这部“电脑”不在自己手边上,多做一步没有坏处。

          2017.08.23 at 11:52
          #13
          • zhuisui

            不在手边就算了

            2017.08.24 at 15:23
            #14