Мне нужно скопировать некоторые данные из кластера очень ограниченных машин через сеть, которая в настоящее время имеет проблемы с DNS (поэтому некоторые соединения странно не работают). Я обнаружил, что единственный способ скопировать данные с компьютера - запустить scp с этого компьютера. На данный момент рабочий процесс:
- для каждой машины в машинах
ssh machine
- введите пароль
scp files destination:results
- введите пароль
- Подождите
- повторить навсегда
Я схожу с ума от этого ручного труда. Я хочу решение, которое позволяет мне вводить пароль один раз.
Я искал решения. Большинство рекомендует установить ключи SSH, но для их распространения требуется та же процедура. Другие упоминают expect
программа, но у меня ее нет в этой системе.
Как это можно сделать?
Обновить: Основной компьютер работает под управлением FreeBSD 9, а 100 серверов работают под управлением Ubuntu 12. У меня нет рута на любой машине.
for s in $LIST_OF_SERVERS; do ssh-copy-id $s; done
и поместите мой пароль (плюс перевод строки) в буфер обмена. Ручной труд все еще, но идет по логике, и, опять же, нужно будет сделать только один раз для каждого сервера.Ответы:
Я предполагаю, что это все хосты Linux и что у вас есть доступ к ним root. Я также предполагаю, что они используют
apt
для управления пакетами, но это решение легко применить сyum
или жеpacman
или любой другой менеджер пакетов.Насколько я знаю,
ssh
не предлагает способ указать пароль в командной строке, поэтому сначала вам нужно будет установитьsshpass
на вашей локальной машине:Это позволит вам передать пароль в качестве аргумента командной строки:
Теперь создайте файл со всеми интересующими вас IP-адресами, по одному на строку. Вы можете разобрать этот файл для установки
sshpass
на каждой удаленной машине. Если ваш парольfoo
и вы подключаетесь какroot
, ты можешь сделатьsshpass
теперь установлен на каждом сервере. Теперь снова пройдитесь по серверам и скопируйте ваши файлы. Если вы копируете какroot
иroot
пароль для вашегоdestination
являетсяbar
, сделай это:Вы также можете использовать
sshpass
скопировать файлы ключей и - если вы использовали пустую фразу-пароль - разрешить доступ без пароля, чтобы в следующий раз у вас не возникло этой проблемы:Как только это будет сделано, вы сможете скопировать файлы, используя:
источник
scp
от вашей машины, таким образом, по крайней мере, вам не нужноssh
:scp user@ip:/remote/path /local/path
, Затем, если вы скопируете свой пароль в буфер обмена, вы можете просто нажать среднюю кнопку мыши 100 раз, чтобы ввести пароль.sshpass
действительно требуется рут?