Friday, March 11, 2011

Копирование файлов на удаленный компьютер без запроса пароля.

Недавно мне нужно было скопировать пачку файлов в Линуксе на удаленные компьютеры.(около 50 машин). Причем заливать апдейты мне придется часто, пару раз в неделю.
Проблема в том, что команда SCP спрашивает пароль. Задать пароль не получается, к сожалению.
scp /home/login/test.txt login:pass@192.168.1.11/home/test/

Можно сделать shell скрипт, который ловит запрос пароля и шлет его в нужный момент. Но он не запустился. Нужно было ставить дополнительные пакеты (expect). Пакет не встал, чего-то ему на хватало - типичная проблема с dependencies. Сама машина на немецком Линуксе и ругается тоже на немецком. Как всегда - обычный админский гемор. Да и ставить всякие пакеты я не хочу. Машина в лайве и, если что-то слетит, будет очень и очень плохо. Более того пароль в скрипте будет плейн текстом. А это, кхм... Не очень безопасно.

Есть выход. Немного геморный, но он есть. Надо создать пару RSA ключей на исходной машине. А затем добавить публичный ключ во все остальные машины. Тогда при ssh/scp аутентификация пароль спрашиваться не будет. Делается это так. Генерируем пару ключей с помощью команды:

ssh-keygen -t rsa -b 1024

Теперь в папке /home/$USER/.ssh/ появится файл id_dsa.pub. Его на скопировать на все удаленные машины. Это и есть публичный ключ. Копируем:

scp /home/$USER/.ssh login@192.168.1.111:/home/$USER/.ssh

Ура, файл скопирован. Теперь логинимся на удаленную машину. И добавляем скопированный ключ в список авторизированных ключей - в authorized_keys (NB! Будьте внимательны кто является владельцем файла).
login@image2:~/.ssh$ ls -l
-rw-r--r-- 1 root root 14679 2011-01-17 23:43 authorized_keys
-rw------- 1 login users 887 2011-03-09 08:55 id_rsa
-rw-r--r-- 1 login users 221 2011-03-09 08:55 id_rsa.pub
-rw-r--r-- 1 login users 6280 2011-03-09 08:41 known_hosts


Делаем все root-ом

sudo cat id_rsa.pub >>authorized_keys

Если файла нет, создаем его:

cp id_rsa.pub authorized_keys


Теперь выходим и пробуем зайти снова.
login@image2: logout
Connection to 192.168.1.11 closed.
test@image:~/.ssh$ ssh login@192.168.1.11
login@image2:

Если заходит без запроса паролей - у вас получилось!!!!

Что дальше? А дальше проделываем все с остальными машинами. Создаем шел скрипт test.sh, который будет копировать нужные файлы:

scp /home/$USER/file1.dat login@192.168.1.111:/home/$USER/
scp /home/$USER/file1.dat login@192.168.1.112:/home/$USER/
scp /home/$USER/file1.dat login@192.168.1.113:/home/$USER/
scp /home/$USER/file1.dat login@192.168.1.114:/home/$USER/


даем ему права на запуск
chmod +x test.sh

и запускаем
./test.sh

P.S. $USER - это имя пользователя.
Если у кого-то есть замечания и другие идей, пишите. Буду признателен.

No comments:

Post a Comment