como evitar ssh pedindo permissão?

58

Estamos tentando acelerar a instalação dos nós da Oracle para a instalação do RAC. isso requer que instalemos e configuremos o ssh para que não solicite uma senha.

O problema é: no primeiro uso, somos solicitados a

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

Existe uma maneira de evitar isso ou estamos fadados a conectar pelo menos uma vez em todos os servidores de todos os servidores manualmente?

Nicolas de Fontenay
fonte

Respostas:

91

Defina StrictHostKeyChecking nono seu /etc/ssh/ssh_configarquivo, onde será uma opção global usada por todos os usuários no servidor. Ou defina-o em seu ~/.ssh/configarquivo, onde será o padrão apenas para o usuário atual. Ou você pode usá-lo na linha de comando:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

Aqui está uma explicação de como isso funciona man ssh_config (ou veja esta versão mais atual ):

StrictHostKeyChecking

      Se esse sinalizador estiver definido como "yes", o ssh nunca adicionará automaticamente chaves de host ao $HOME/.ssh/known_hostsarquivo e se recusa a se conectar a hosts cuja chave de host foi alterada. Isso fornece proteção máxima contra ataques de cavalos de Troia, no entanto, pode ser irritante quando o /etc/ssh/ssh_known_hostsarquivo é mal mantido ou quando conexões com novos hosts são frequentemente feitas. Esta opção força o usuário a adicionar manualmente todos os novos hosts. Se esse sinalizador estiver definido como "não", sshadicionará automaticamente novas chaves de host aos arquivos de host conhecidos do usuário. Se esse sinalizador estiver definido como "perguntar", novas chaves de host serão adicionadas aos arquivos de host conhecidos do usuário somente depois que o usuário confirmar que é isso que eles realmente querem fazer, e o ssh se recusará a se conectar aos hosts cuja chave de host foi alterada . As chaves de host de hosts conhecidos serão verificadas automaticamente em todos os casos. O argumento deve ser "sim", "não" ou "perguntar". O padrão é "perguntar".

Tim Kennedy
fonte
1
+1, eu também faço isso para meus servidores. E só para esclarecer, a mensagem na pergunta vem do cliente ssh no computador cliente de conexão e não do servidor.
Patkos Csaba
3
Essa resposta parece um problema de segurança em andamento.
SunSparc 15/06
25

ssh-keyscan - Reúna chaves públicas ssh

Se você já conhece a lista de hosts aos quais se conectará, basta emitir:

ssh-keyscan host1 host2 host3 host4

Você pode dar a -Hopção de obter resultados de hash, como os padrões ssh agora

Além disso, você pode dar -t keytypeeram KeyType é dsa, rsaou ecdsase você tem uma preferência a respeito de que tipo de chave para agarrar em vez do padrão.

Após a execução ssh-keyscan, o arquivo hosts conhecido será preenchido previamente e você não terá o ssh pedindo permissão para adicionar uma nova chave.

Kurtm
fonte
1
Estou um pouco intrigado com o comentário "terá pré-preenchido" ... known_hosts não foi criado ou modificado depois de executar isso. Você quer dizer que o conteúdo pode ser canalizado para o arquivo para preenchê-lo?
23418 rschwieb
4
Confirmando com techrepublic.com/article/… . ssh-keyscan -H myhost >> ~/.ssh/known_hosts, ou para todo o servidor,/etc/ssh/ssh_known_hosts
cole
12

Você pode adicionar a impressão digital aos conhecidos_hosts de cada servidor. Para um único usuário:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
David Souther
fonte
3
Esta não é mais a maneira correta de fazê-lo, desde quando o hash foi introduzido.
usar o seguinte código
10

Ignorar host

Ignore o HostKeyChecking. Para isso eu uso, por exemplo:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null [email protected]

Adicionar host

Adicione a impressão digital do host / servidor .ssh/known_hostsantes de sua primeira conexão. Esta é a maneira mais segura.

xebeche
fonte
Oi. O Oracle emite o comando ssh para que eu não tenha controle sobre como ele executa isso.
Nicolas de Fontenay
Votado. A maioria das respostas que eu vi perder a menção de dev anulando o arquivo hosts conhecido. Isso torna o comando muito mais utilizável e não arruina nenhuma configuração existente.
Alex
(2) Certamente, adicionar a impressão digital ao arquivo conhecido dos hosts é a abordagem ideal - mas como fazer isso? (1) Por que é benéfico definir o arquivo de hosts conhecidos do usuário  /dev/null? Não seria melhor fazer ssh -oStrictHostKeyChecking=no [email protected]uma vez para inserir a impressão digital do servidor no $HOME/.ssh/known_hostsarquivo, para que as conexões subsequentes continuem sem um pedido de confirmação?
G-Man diz 'Reinstate Monica'
3

Execute o seguinte trecho antes de tentar.

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: Estritamente não para servidores de produção, cuidado com o ManInMiddle

147,3k
fonte
0

No entanto, eu gosto da resposta de Tim para coisas únicas, se este for um host ao qual você pretende se conectar regularmente, eu criaria uma entrada no seu ~ / .ssh / config (crie-a se o arquivo não existir).

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
Jaime
fonte