Недавно мне нужно было скопировать пачку файлов в Линуксе на удаленные компьютеры.(около 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