Estou escrevendo um script para criar chaves ssh de ativação e enviá-las para os hosts conhecidos. Isto é para quando você deseja chaves por dispositivo.
Incluí uma opção para fazer upload da nova chave para o host após sua criação. No entanto, o bash parece ter perdido minha sessão ou algo assim, porque ele me solicita uma senha, quando deveria ter apenas enviado o item, já que tenho as chaves carregadas em um gerenciador de chaves, ou como alternativa, solicite a senha do arquivo-chave especificado na configuração do ssh.
Aqui estão 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 executei o script, recebi o seguinte:
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, 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 de ssh?
Responder1
OK, me sinto um pouco idiota por ter cometido esse erro, mas um pouco inteligente por ter descoberto isso - graças à sugestão de @Jajuke de fazer um ssh muito, muito detalhado.
Na minha configuração ssh, tenho abreviações configuradas para meus hosts, por exemplo:
Host myhost
HostName myhost.com
User username
E no shell, eu simplesmente 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 de host completo: P Na minha configuração ssh, não tinha nada configurado para myhost.com
; apenas myhost
. Então, é claro, o ssh recorreu à autenticação por senha.
Minha solução foi atualizar minha configuração ssh para incluir o nome do host completo próximo ao meu alias:
Host myhost myhost.com
HostName myhost.com
User username
E simplesmente funciona de novo!
Esperançosamente, isso salvará alguém de perplexidade semelhante.