bash забывает настройки ssh в скрипте

bash забывает настройки ssh в скрипте

Я пишу скрипт для создания набора ключей ssh ​​и загрузки их на известные хосты. Это для случаев, когда вам нужны ключи на устройство.

Я включил опцию загрузки нового ключа на хост после его создания. Однако bash, похоже, потерял мою сессию или что-то в этом роде, потому что он запрашивает у меня пароль, когда он должен был просто отправить элемент, так как у меня загружены ключи в менеджере ключей, или, в качестве запасного варианта, запросить у меня пароль файла ключей, указанного в конфигурации ssh.

Вот соответствующие части сценария:

for host in "${hosts[@]}"
do
  keyfile=$(printf "%s_keys/%s_%s_%s.id_ed25519" "$system" "$system" "$email" "$host")
  ssh-keygen -t ed25519 -C $(printf "%s_%s" "$email" "$system") -P "$pw1" -f "$keyfile"
  read -r -p "ssh new key to host $host? [y/n] " response
  if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
  then
    cat $keyfile.pub | ssh "$host" 'cat >> .ssh/authorized_keys'
  fi
done

Итак, когда я запустил скрипт, я получил следующее:

The key fingerprint is:
SHA256:n8FWwe+TaHbWKwWVzCdIbAcfFnPTh8J0pukzuv9J4pQ a_b
The key's randomart image is:
+--[ED25519 256]--+
...
+----[SHA256]-----+
ssh new key to host [email protected]? [y/n] y
[email protected]'s password:
Permission denied, please try again.

Однако:

$ ssh myhost.com

You have new mail.
Last login: Sun Oct 30 03:28:07 2016 from 65.60.221.155
[myhost.com ~]

В качестве теста я написал этот более упрощенный скрипт, и он отработал без сбоев:

$ cat test.bash
#!/bin/bash
echo test | ssh myhost.com 'cat >> test.txt'
$ ./test.bash

$ ssh myhost.com

You have new mail.
Last login: Sun Oct 30 03:33:25 2016 from 65.60.221.155
[myhost.com ~] cat test.txt
test

Что я сделал в своем длинном скрипте, из-за чего он забыл мою информацию SSH?

решение1

Ладно, я чувствую себя немного глупым из-за этой ошибки, но немного умным из-за того, что разобрался с ней — спасибо @Jajuke за предложение сделать очень-очень подробный ssh.

В моей конфигурации ssh я настроил сокращения для своих хостов, например:

Host myhost
  HostName myhost.com
  User username

А на оболочке я просто так делаю, ssh myhostи все работает.

Однако в моем скрипте я анализирую имена хостов из .ssh/known_hosts, который содержит полное имя хоста :P В моей конфигурации ssh я ничего не настроил для myhost.com; только myhost. Поэтому, конечно, ssh вернулся к аутентификации по паролю.

Моим решением было обновить конфигурацию ssh, включив полное имя хоста рядом с моим псевдонимом:

Host myhost myhost.com
  HostName myhost.com
  User username

И это снова работает!

Надеюсь, это убережет кого-то от подобного недоумения.

Связанный контент