2015-05-18 1 views
0

Я настраиваю ключи SSH на своих серверах, и я пытаюсь написать сценарий, чтобы скопировать их все. В основном то, что я хочу сделать, это скопировать идентификатор ssh с сервера 1 на сервер 1-10, затем войти в сервер 2 и скопировать идентификатор ssh с сервера 2 на сервер 1-10.Копирование ssh-ключа на несколько серверов/логинов с использованием сценария оболочки

У меня есть массив и 2 для циклов с командой ssh-copy-id, но мне не хватает шага для входа на каждый сервер по мере его появления в списке. Я понимаю, что сейчас буду вводить пароли, но это намного проще, чем входить в каждый из них по отдельности. Кто-нибудь может мне помочь?

Кроме того, моя работа заблокировала GitHub, поэтому, пожалуйста, не связывайтесь с ними. Я не могу видеть его :(

+0

Напишите один цикл над серверами в скрипте. Затем запустите это на первом хосте. Затем запустите цикл на всех серверах, которые используют только что скопированные учетные данные, чтобы скопировать сценарий друг на друга, а затем запустить ssh и запустить его? –

+0

@EtanReisner - я пробовал scp раньше, и ни один из ключей не работал, поэтому на этот раз я хотел использовать ssh-copy-id, чтобы получить ключи на всех серверах с минимальными манипуляциями. – Brandy

+0

Я предлагал использовать 'ssh-copy-id'. Это то, что делает сценарий. Второй цикл собирался использовать учетные данные 'ssh-copy-id'd * с * scp, чтобы нажимать скрипт, который выполняет цикл' ssh-copy-id', на каждом компьютере, а затем запускает его (через второй вызов ' ssh'). –

ответ

0

что-то вроде следующего (полностью непроверенного) кода должен делать то, что вы хотите, я считаю.

кроме хоста вы бежите это на будет иметь записи для себя в authorized_keys Хостов файлы, если что вопросы (которые можно было бы избежать, но требует больше работы и, вероятно, может быть так же легко исправить вручную, если это необходимо).

hosts=(hostA hostB hostC hostD ...) 

for host in "${hosts[@]}"; do 
    # Skip the current host. 
    if [ "$HOSTNAME" = "$host" ]; then 
     continue 
    fi 

    # Copy the current host's id to each other host. 
    # Asks for password. 
    ssh-copy-id "$host" 
done 

# Get the id's from each host. 
for host in "${hosts[@]}"; do 
    # Skip the current host. 
    if [ "$HOSTNAME" = "$host" ]; then 
     continue 
    fi 

    ssh "$host" 'cat .ssh/id_rsa.pub' >> host-ids 
done 

for host in "${hosts[@]}"; do 
    # Skip the current host. 
    if [ "$HOSTNAME" = "$host" ]; then 
     continue 
    fi 

    # This might work but I'm not sure. 
    ssh-copy-id -i host-ids "$host" 
    # If that didn't work then this should. 
    #ssh "$host" 'cat >> .ssh/authorized_keys' <host-ids 
done 
0

Спасибо за все предложения, но я только что вошли в каждый сервер и запустил скрипт У меня не было времени больше играть со сценариями:/SSH-ключи все еще не работали, но это еще раз/поток.

Смежные вопросы