Скопировать мой ключ ssh на удаленную машину через ssh-copy-id в сценарии без запроса?

9540
Aamir Mushtaq

Мой пример использования - мне нужно скопировать мой ключ ssh для авторизованного доступа на удаленную машину. Мне нужно иметь возможность вызывать скрипт, который копирует мой ключ ssh на удаленную машину без необходимости ввода. В настоящее время он запрашивает пароль, а также да к отпечатку пальца RSA. Мне нужно, чтобы иметь возможность автоматически добавлять мои хосты друг к другу через диапазон IP

5

3 ответа на вопрос

10
Rob Calistri

Я считаю, что вы можете использовать sshpass.

  • Ubuntu / Debian: apt-get install sshpass
  • Fedora / CentOS: yum install sshpass

Например:

sshpass -p "PASSWORD" ssh-copy-id -o StrictHostKeyChecking=no USERNAME@IP

Я предлагаю не сохранять пароль в сценарии напрямую, поскольку сценарий может остаться на компьютере с жестко заданным паролем. Это еще больше увеличит проблему безопасности. Передача в качестве входного аргумента может быть предпочтительнее Slizzered 9 лет назад 1
Я бы согласился со Slizzered на его хранение на сервере. Это должен быть аргумент сценария. Тем не менее, если вы передадите в качестве аргумента, у вас все еще будет проблема с тем, что этот пароль находится в фоновых процессах во время выполнения скрипта. В любом случае, если вы обходите защиту ssh с помощью таких вещей, как 'sshpass', всегда есть последствия для безопасности! Rob Calistri 9 лет назад 2
0
jasonz

For ssh password prompt, try to use ansible/ansible-playbook -k/--ask-pass. It will call sshpass(FYI, maybe OSX don't ship with sshpass).

For host key checking, add

[defaults] host_key_checking = False 

in ~/.ansible.cfg or /etc/ansible/ansible.cfg.

Or export ANSIBLE_HOST_KEY_CHECKING=False just like this manual says.

For ssh keys deploy, use authorized_keys module in ansible playbook. It's easier for user to keep the scripts idempotency.

0
Adam C.

Если вы можете ввести пароль один раз, следующий скрипт очень быстро скопирует ваш ключ ssh на большое количество хостов (перечисленных в hosts.txt), не вводя пароль в командной строке:

# sudo yum install moreutils sshpass openssh-clients echo 'Input Password:'; read -s SSHPASS; export SSHPASS; parallel -i -j 25 sshpass -e ssh-copy-id '-o ConnectTimeout=10 -o StrictHostKeyChecking=no {}' -- `cat hosts.txt`; export SSHPASS='' 

Похожие вопросы