0

我最近开始更换我的备份存储。带有 WD MyBook 的 Mac Mini 正在被 Synology DiskStation 取代。在将备份目标重新定位到 Synology 后,我一直用于将外部 HDD 与 VM 同步的备份脚本中停止正常工作。该脚本基本上在每个文件的 SSH 会话中启动 rsync 进程。可以在此处找到脚本的详细信息;http://www.reddipped.com/2016/07/speeding-vm-backups-using-rsync/

为了能够在不必为每个 SSH 会话输入密码的情况下运行脚本,已经配置了公钥身份验证。

客户端配置 (Mac OS X Sierra)

  • 创建私钥/公钥对
    ssh-keygen -t rsa -f ~/.ssh/id_rsa -C "rsync"
  • 填写随机密码,例如“rsync 协议”

  • 将公钥复制到 Synology 上的用户主目录

    ssh Peter\ van\ Nes@newyork 'mkdir ~/.ssh'
    cat ~/.ssh/id_rsa.pub | ssh Peter\ van\ Nes@newyork 'cat - >> ~/.ssh/authorized_keys'
    ssh Peter\ van\ Nes@newyork 'chmod 644 .ssh/authorized_keys'
    ssh Peter\ van\ Nes@newyork 'chmod 755 ~ ~/.ssh' 
    

服务器(群晖)

  • 打开到 Synology 的 SSH 会话

    ssh "Peter van Nes"@newyork
    
  • 编辑 sshd_config

    vi /etc/ssh/sshd_config   
    # Enable RSAAuthentication yes     
    # Enable PubkeyAuthentication yes
    # Enable AuthorizedKeysFile .ssh/authorized_keys
    # Enable ChallengeResponseAuthentication yes
    # Add MaxSessions 50
    # Add MaxStartups 50:10:100
    
  • 重启服务

    # restart ssh-shell
    synoservicectl --restart ssh-shell
    # restart rsync daemon
    synoservicectl --restart rsyncd   
    

完成这些步骤后,我可以使用公钥成功登录。运行脚本时,它最初按预期运行,只有在几千个文件之后,才需要再次输入密钥的密码。

我确实将问题分解为这个小脚本,它为我重现了这个问题。

#!/bin/bash

sessions=0
while true
do
    sessions=$(($sessions + 1))
    echo "Session " $sessions
    ssh peter@newyork -x "ls -al"
done 

在数千个连续的 SSH 会话之后,再次请求公钥的密码。每次运行的连续成功会话数不同。这可以是 2102,也可以是 5000+。

Session  2101
total 4
drwxr-xr-x  1 peter users   24 Oct 15 12:46 .
drwxrwxrwx+ 1 root  root    92 Oct 16 22:29 ..
drwxr-xr-x  1 peter users   30 Oct 15 12:46 .ssh
-rwxrwxrwx+ 1 peter users 1239 Oct 15 12:46 .viminfo
Session  2102
total 4
drwxr-xr-x  1 peter users   24 Oct 15 12:46 .
drwxrwxrwx+ 1 root  root    92 Oct 16 22:29 ..
drwxr-xr-x  1 peter users   30 Oct 15 12:46 .ssh
-rwxrwxrwx+ 1 peter users 1239 Oct 15 12:46 .viminfo
Session  2103
Enter passphrase for key '/Users/petervannes/.ssh/id_rsa': 

当使用 -vvv 参数运行 ssh 时不会给出任何提示,Synology 上的 auth.log 也会报告任何身份验证错误。

知道如何调试或解决这个问题吗?

4

1 回答 1

0

通过使用将证书添加到钥匙串来修复它ssh-add -K

#!/bin/bash

sessions=0

ssh-add -K

while true
do
    sessions=$(($sessions + 1))
    echo "Session " $sessions
    ssh peter@newyork -x "ls -al"
done 
于 2016-10-24T18:43:47.293 回答