Неинтерактивная генерация ssh-ключей пользователя

Для беспарольного входа по ssh нужны ключи пользователя. Если разворачивается какая-либо система обмена (например, резервного копирования), которая использует канал ssh, хотелось бы, чтобы генерация и обмен ключами производились без дополнительного ввода от оператора.

Как это работает, описывалось много раз в различных источниках, поэтому кратко: в домашнем каталоге пользователя, под которым заходим на удаленную машину, должны лежать пары ключей (rsa, dsa), про которые знает удаленная машина. Производим ключи.

Скрипт sshkeygen.sh:

#!/bin/bash

LOCAL_IP=192.168.1.1
REMOTE_IP=192.168.1.2
HOME=/root/.ssh
KEY_NAME_RSA=id_rsa
KEY_NAME_DSA=id_dsa
HOST_KEY=/etc/ssh/ssh_host_rsa_key.pub
GEN="ssh-keygen -t"

$GEN dsa -f $HOME/$KEY_NAME_DSA -N ""
$GEN rsa -f $HOME/$KEY_NAME_RSA -N ""
cat $KEY_NAME_DSA.pub $KEY_NAME_RSA.pub > $HOME/authorized_keys

# Если не хотим отвечать "yes" при первом входе, должны быть
# сформированы правильные файлы known_hosts
# при этом предполагается, что файлы ключей хоста
# в каталоге /ets/ssh уже имеются

echo "$REMOTE_IP `cat $HOST_KEY`" > $HOME/known_hosts
echo "$LOCAL_IP `cat $HOST_KEY`" >> $HOME/known_hosts

echo ""

Для одностороннего входа достаточно в домашний_каталог/.ssh пользователя, под которым заходим на $REMOTE_IP, положить authorized_keys. Однако, для хода туда-сюда с любой машины на любую, нужно синхронизировать полученное содержимое каталогов (в данном случае /root/.ssh) на обоих машинах и положить на удаленную машину в каталог /etc/ssh пару ключей rsa хоста от своей. Это файлы /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub.

Понятно, что ключи сгенерированы с пустой парольной фразой, иначе не будет неинтерактивного входа; из скрипта выкушены все проверки и эхи, которые можно добавить по вкусу.

Назад