RSS
 

Авторизация по DSA ключу для чайников, у которых много серверов

06 Feb

Собственно, генерация ключа разжевана миллионы раз (если лень читать ssh-keygen(1), то можно глянуть тут, например). Далее настает огромная лень – это ж нужно свой id_dsa.pub залить на каждую машинку, вкинуть его в authorized_keys и т.п. В общем, куча ручной работы. Во линуксах есть ssh-copy-id, но не во всех дистрибутивах, как я вижу в своем хозяйстве.

Т.к. собственную лень нужно всячески баловать :) написал небольшой скриптец на шелле. Достаточно его и собственный id_dsa.pub (который не секретен, так как публичен) залить какой-нить ресурс – и можно будет ключи распространять чуть ли не на автомате. Подчеркиваю – никакого rocket science, просто быстрый хак на shell. Не забудьте модифицировать под свои условия.

#!/bin/sh

# Use your own params
TMPFILE=`mktemp /tmp/deineka.XXXXXX` || exit 1
AKEYS=$HOME/.ssh/authorized_keys
URL=http://my-site-or-dropbox.etc/securedir/id_dsa.pub

DetectFetch()
{
        if test -x /usr/bin/fetch; then
                fetch="/usr/bin/fetch -o "
        elif test -x /usr/bin/wget; then
                fetch="/usr/bin/wget -O "
        elif test -x /usr/bin/curl; then
                fetch="/usr/bin/curl -o "
        else
                echo "ERROR: no fetch program found."
                exit 1
        fi
}

DetectFetch


echo Fetching key
$fetch $TMPFILE $URL
echo -n Adding to $AKEYS...
if [ ! -d $HOME/.ssh ]; then
   mkdir -p $HOME/.ssh
   chmod 700 $HOME/.ssh
fi

cat $TMPFILE >> $AKEYS
echo done
chmod 600 $AKEYS
rm -f $TMPFILE

Использование простое до неприличия – скачали скрипт, запустили его, удалили его.
p.s. Функцию DetectFetch честно скопировал из инсталлятора продуктов ISPSystem :)

 

Leave a Reply

You must be logged in to post a comment.

  1. @yurnov

    февраля 6, 2012 at 16:18

    Во линуксах есть ssh-copy-id, но НЕ во всех дистрибутивах, как я вижу в своем хозяйстве.

     
  2. @yurnov

    февраля 6, 2012 at 16:24

    реквестую ще скриптик, який походить по серверах з txt файлу ssh-ем і на кожному із них покладе і запустить цей скрипт :)

     
    • Дмитрий

      февраля 11, 2012 at 19:12

      Спасибо, опечатку поправил =)

      А запускать удобнее imho, чем ssh-copy-id, типа вот как-то так (если скриптик выложить в /ssh/get на своем сайте):

      wget -O – http://your.domain/ssh/get | sh

      или, для FreeBSD
      fetch -o – http://your.domain/ssh/get | sh