Връзка по ключ от SSH към SSH2

Наскоро ми се наложи да организирам бекъп от (наследен) сървър под FreeBSD на машина под Linux.

Оригиналната система за бекъп от сървъра беше Bacula, която никак не е лоша. Личните ми вкусове за системи с малко компютри в тях обаче клонят към rsync. Затова, когато дискът на бекъп машината се препълни и се наложи да бъде сменен с по-голям, реших да заложа на легендарния си любимец. Както винаги, той не ме подведе.

Сблъсках се обаче с интересен проблем – не ми беше лесно да организирам връзката през шифрован канал. Споделям тук как се справих, за ако някой някога се мъчи с подобна ситуация.

За канала използвам SSH. Задавате на rsync опция -e ssh (в моя случай SSH беше разумно настроен на нестандартен порт: -e "ssh -p 12345") и информацията тече във вид, неприятен за любопитните по трасето. За да настроите обаче автоматиката, ви трябва логване чрез ключ. А по някаква причина SSH сървърът упорито отказваше да ми приеме ключа и настояваше за парола. Прверките на правопис на имената на файловете, пермишъни за тях и директориите и чопленето за информация през -v, -vv и -vvv опциите на SSH не дадоха резултат.

След половин час чоплене и зяпане накрая видях очевадното: на сървъра имаше инсталирани както SSH, така и SSH2, и работеше вторият. Наругах се здравата и откопирах authorized_keys файла в ~/.ssh2, с отново същия резултат. След пет минути ровене из мрежата последва второ самонаругаване – SSH2 използва различна система на описване на оторизираните за връзка ключове.

~/.ssh2# mv authorized_keys backup.pub
~/.ssh2# echo "Key backup.pub" >> authorization

И… нещата отново не проработиха.

Този път падна около час четене и ровене, докато не открих втората логична до очевадност разлика – форматът на публичните ключове за SSH и SSH2 е различен. Изконвертирах формата на линуксовската машина:

~# ssh-keygen -e -f ~/.ssh/id_rsa.pub > ~/.ssh/id_rsa_ssh2.pub

и вече този файл, копиран като ~/.ssh2/backup.pub, свърши чудесна работа. 🙂

Leave a Reply