Почему требуется аутентификация с помощью открытого ключа SSH по ключевой фразе снова после 2k сеансов?
Я недавно начал замену моего резервного хранилища. Mac Mini с WD MyBook заменяется на Synology DiskStation. Один из сценариев резервного копирования, который я использовал для синхронизации моего внешнего жесткого диска с виртуальными машинами, перестал работать должным образом после перемещения места назначения резервного копирования в Synology. Сценарий в основном запускает процесс rsync в сеансе SSH для каждого файла. Подробности сценария можно найти здесь; 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"
Скопируйте открытый ключ в домашний каталог пользователей в синологии
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 в Synology
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':
Когда ssh с аргументом -vvv не дает никаких подсказок, auth.log в Synology также сообщает об ошибках аутентификации.
Любая идея, как отладить или исправить это?
1 ответ
Исправлено путем добавления сертификатов в связку ключей с помощью 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