bash esquece as configurações do ssh no script

0

Estou escrevendo um script para criar um conjunto de chaves ssh e enviá-las para os hosts conhecidos. Isto é para quando você quer chaves por dispositivo.

Eu incluí uma opção para carregar a nova chave para o host após sua criação. No entanto, o bash parece ter perdido minha sessão ou algo assim, porque me pede uma senha, quando deveria ter enviado o item, já que tenho as chaves carregadas em um gerenciador de chaves, ou como resposta, solicite a senha do arquivo de chaves especificado na configuração do ssh.

Veja as partes relevantes do script:

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

Então, quando eu corri o roteiro, percebi isso:

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.

No entanto:

$ ssh myhost.com

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

Como teste, eu escrevi este script mais simplificado, e ele disparou sem problemas:

$ 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

O que eu fiz no meu script mais longo que fez com que ele esquecesse minhas informações do ssh?

    
por user394 30.10.2016 / 04:38

1 resposta

0

OK, eu me sinto um pouco burro por ter cometido este erro, mas um pouco esperto por ter descoberto - graças à sugestão do @Jajuke de fazer um muito, muito detalhado ssh.

Na minha configuração ssh, tenho abreviaturas configuradas para meus hosts, por exemplo:

Host myhost
  HostName myhost.com
  User username

E no shell, eu apenas faço ssh myhost e tudo funciona.

No entanto, no meu script, eu analiso os nomes de host de .ssh/known_hosts , que tem o nome completo do host: P Em minha configuração ssh, eu não tinha nada configurado para myhost.com ; apenas myhost . Então, é claro, o ssh voltou para a autenticação de senha.

Minha solução foi atualizar minha configuração ssh para incluir o nome do host completo ao lado do meu alias:

Host myhost myhost.com
  HostName myhost.com
  User username

E isso só funciona de novo!

Espero que isso possa salvar alguém de perplexidade semelhante.

    
por 31.10.2016 / 03:45