Questão Como posso configurar o login SSH sem senha?


Eu quero ser capaz de acessar um remoto via ssh sem ter que digitar a senha o tempo todo.

  • Como faço para configurá-lo?
  • Um comando diferente é necessário para executar uma sessão sem senha?

226
2018-06-04 17:24


origem


Você está usando o openssh? (se isso é fácil;)) - Rinzwind
@Rinzwind, Por que eu me incomodaria em obter a versão proprietária quando o OpenSSH já está pré-instalado? - Oxwivi
Eu tento não fazer assupções;) - Rinzwind
Observe que isso é considerado uma prática de segurança insatisfatória e algumas distribuições desativam-na imediatamente. Não tenho certeza, mas é possível que você precise ativar PermitRootLogin dentro /etc/ssh/sshd_config a fim de fazer este trabalho. - Kevin
@ Kevin, por favor, esclareça-se. Estamos falando de ssh-ing sem senha, que geralmente é um boa prática. Você quer dizer ssh-ing em um shell de raiz? Isso não é coberto por esta questão. - Oxwivi


Respostas:


Responda

Execute estes comandos:

ssh-keygen

Então você precisará copiar a nova chave para o seu servidor:

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

Depois que a chave é copiada, ssh na máquina normalmente:

ssh user@host

Agora você pode logar sem digitar uma senha da máquina em particular na qual você executou os comandos.

Exemplo

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Explicação

Isso pressupõe que você já possa se conectar com sucesso ao seu servidor via SSH.

Você precisará gerar um par de chaves SSH que permitirá identificar você como você mesmo sem usar uma senha. Você pode optar por proteger as chaves com um código de acesso, se desejar, mas isso pode ser deixado em branco, permitindo o acesso totalmente sem senha ao SSH.

  1. Primeiro crie seu SSH Keypair executando ssh-keygen isso criará um id_rsa e id_rsa.pub Arquivo. o pub arquivo é o que acontece nos servidores, a chave privada (id_rsa) é o que fica com você e é como você se identifica.
  2. Em seguida copie a chave pública para o seu servidor com ssh-copy-id user@server substituindo o usuário por seu usuário e servidor remotos com o nome DNS ou endereço IP da máquina. Ele solicitará sua senha SSH, insira-a e, se tudo for concluído com sucesso, você poderá acessar a máquina via ssh user@server sem precisar de uma senha.

Referências


231
2018-06-04 17:36



@Oxwivi esta resposta é a maneira mais correta de fazê-lo - mas parece mais longo. Tudo que você precisa fazer é digitar ssh-keygen siga as instruções na tela e digite ssh-copy-id user@server substituindo usuário por seu usuário remoto e servidor com a máquina remota - Marco Ceppi♦
Eu tive este erro "Agente admitiu falha ao assinar usando a chave." todas as vezes ao tentar fazer o login após seguir este procedimento. A solução foi rodar "> ssh-add" na máquina local e agora eu posso logar na máquina remota como esperado. - jmbouffard
Vale a pena mencionar que, se você precisar usar uma porta personalizada para @server, será necessário fazer isso com: ssh-copy-id "not-marco@127.0.0.1 -p 1234". - s3m3n
@Rinzwind: Isso significa que eu não posso autenticar de um cliente / máquina desconhecido para o meu servidor se eu desabilitar a autenticação passwd e permitir somente a autenticação de chave. Existe alguma maneira de permitir o login de uma máquina desconhecida usando a chave privada que foi gerada para o cliente conhecido / configurado se comunicar com o servidor? Quero dizer, é esta chave privada portátil e poderia ser usado para me autenticar para servidor de outras máquinas, em caso de necessidades de emergência? - Rajat Gupta
Mas o servidor ainda está pedindo a senha ... - lerner


Digite os seguintes comandos:

  1. ssh-keygen 

    pressione Entrar tecla até obter o prompt

  2. ssh-copy-id -i root@ip_address

    (Será uma vez pedir a senha do sistema host)

  3. ssh root@ip_address

Agora você deve poder fazer o login sem qualquer senha.


30
2018-05-17 08:45





A maneira que eu costumo fazer isso é a seguinte:

ssh-keygen -t rsa

(Quando solicitado por uma senha, deixe em branco)

Então: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Isso requer que a pasta .ssh esteja no diretório inicial no nome do host de destino, com o arquivo authorized_keys nele)

É claro, substitua username pelo username desejado e hostname pelo hostname ou endereço IP desejado

Depois disso, apenas SSH para aquela caixa como você está acostumado.


21
2018-06-04 18:22



O que acontece com o touch e chmod comando na resposta de Rinzwind? - Oxwivi
Você precisará chmod .ssh/authorized_keys arquivo para 0600 ou isso não vai funcionar - Marco Ceppi♦
Isso realmente ajudou, porque eu não consegui fazer com que o ssh-copy-id funcionasse para o root no meu servidor. tem que ser root na situação em que o backuppc (ou qualquer outro daemon) precisa ser ssh em outra máquina. - Adam


Eu normalmente uso sshpass para isso, instale-o com sudo apt-get install sshpass e usá-lo assim

sshpass -p 'password' ssh your_username@your_server

18
2017-12-06 17:26



Por que não usar chaves ssh? - enzotib
Não é uma situação "por que não", ainda funciona perfeito sem adicionar chaves, é apenas outro método que eu diria. - Bruno Pereira
Obrigado pela informação sobre sshpass, nunca ouvi falar disso antes. - Panther
As chaves SSH são a resposta "correta" para a pergunta, mas sshpass é um truque muito útil nos casos em que você não pode alterar o método de autenticação no servidor remoto! - Jacob Krall
Isso é muito perigoso, você manterá em bash_history ou qualquer outra senha simples para os hosts aos quais está se conectando. - kappa


Esta solução é especificamente para usuários usando janelas para ssh em suas máquinas remotas, incluindo imagens de nuvem em Nuvem AWS e GCE Cloud


9
2017-11-20 09:07





Desativar autenticação de senha

Como muitas pessoas com servidores SSH usam senhas fracas, muitas   atacantes online procurarão por um servidor SSH e, em seguida, começarão a adivinhar   senhas aleatoriamente. Um invasor pode tentar milhares de senhas em um   hora, e acho que até mesmo a senha mais forte dado tempo suficiente. o   A solução recomendada é usar chaves SSH em vez de senhas. Ser como   difícil adivinhar como uma chave SSH normal, uma senha teria que conter   634 letras e números aleatórios. Se você sempre conseguirá fazer login   seu computador com uma chave SSH, você deve desativar a senha   autenticação completamente.

Se você desabilitar a autenticação por senha, só será possível   conectar de computadores que você tenha aprovado especificamente. Isso massivamente   melhora sua segurança, mas torna impossível conectar-se a   seu próprio computador do PC de um amigo sem pré-aprovar o PC, ou   do seu próprio laptop quando você acidentalmente excluir sua chave.

É recomendado desativar a autenticação de senha, a menos que você tenha um   razão específica para não.

Para desabilitar a autenticação por senha, procure a seguinte linha   seu arquivo sshd_config:

#PasswordAuthentication yes

substitua-o por uma linha semelhante a esta:

PasswordAuthentication no

Depois de salvar o arquivo e reiniciar o servidor SSH, você   não deve ser solicitada uma senha quando você efetuar login.

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


7
2018-02-15 01:10



Esta é a resposta correta mais básica, mas boa para segurança! Também desabilite o login root é outro bom - FreeSoftwareServers
Faz PasswordAuthentication no afeta todos os usuários? Se não, como posso desativá-lo para usuários normais, mas deixá-lo inalterado para o root enquanto o testo? Eu realmente não quero foobar e me bloquear completamente. - Adam
Mantenha uma sessão ssh aberta para que você possa mudá-la de volta. Você quer desabilitar senhas e root. Sim, você pode fubar isso. Não;) - Thufir
Durante o ssh, eu tenho um erro Permission denied (publickey). com PasswordAuthentication no. O que devo fazer? Eu mudo PasswordAuthentication no em outro host? - ParisaN


Se você criar um par de chaves público / pricate e efetuar login usando nossa chave pública recém-criada, não precisará digitar sua senha. Dependendo da configuração do seu porta-chaves e / ou do agente ssh, talvez seja necessário proteger sua chave com uma frase secreta.

Aqui está um dos muitos howto curtos para você. É de importância crucial para a segurança deste método, que a chave privada gerada permaneça privada! Você nunca deve compartilhá-lo com ninguém ou permitir o acesso a ele em qualquer capacidade.

Este comando gera uma chave razoavelmente forte ~/.ssh/:

ssh-keygen -b 4096

Dentro ~/.ssh/ você encontrará sua chave pública como id_rsa.pub. Seu conteúdo deve ser anexado aos seus servidores authorized_keys arquivo transportando a mídia via transportável (pen drive) ou habilitando a autenticação de senha no servidor, usando ssh-copy-id ~/.ssh/id_rsa.pub username@server e, em seguida, desativá-lo novamente.

Se você escolheu proteger sua chave com uma frase secreta (no primeiro passo), você pode usar ssh-agent ou o chaveiro do Ubuntu para proteger esse pharse localmente para que você não precise digitá-lo o tempo todo.


4
2018-06-04 17:32





Login / cópia remota sem dar uma senha

As aplicações ssh e scp para login remoto e cópia remota, respectivamente, permitem que você se comunique com um host remoto sem fornecer uma senha. Isso requer que você siga um procedimento de autenticação como o descrito abaixo. Por cliente entendemos a máquina em que você está sentado e por servidor queremos dizer a máquina na qual você deseja efetuar o login sem fornecer uma senha. As etapas do procedimento de autenticação são:

  1. Execute ssh-keygen para gerar chaves privadas e públicas, a menos que isso já esteja feito em sua máquina. Estes são armazenados em arquivos em $HOME/.ssh.
  2. Anexar o conteúdo do arquivo de chave pública ao arquivo $HOME/.ssh/authorized_keys ou $HOME/.ssh/authorized_keys2 no servidor.

Existem três tipos diferentes de protocolos de autenticação. Você especifica o tipo ao executar o ssh-keygen:

  1. SSH versão do protocolo 1, RSA1: esta é a escolha padrão e resulta na identidade dos arquivos (chave privada, deve chmod 0700 para garantir que este arquivo não seja legível para outros) e identity.pub (chave pública).
  2. SSH versão do protocolo 1, RSA: isso é obtido executando ssh-keygen -t rsa e resulta em arquivos id_rsa (chave privada) e id_rsa.pub (chave pública)
  3. SSH versão do protocolo 1, DSA: isso é obtido executando ssh-keygen -t dsa e resulta em arquivos id_dsa (chave privada) e id_dsa.pub (chave pública)

Ao executar o ssh-keygen, você pode confiar nas respostas padrão (implicando que você não fornece uma frase secreta). Isso torna todo o conjunto simples, mas também inseguro.

Você pode especificar o tipo de chaves a ser usado por uma opção para ssh; ssh -1 forças uso de RSA1 chaves (versão de protocolo 1), enquanto ssh -2 forças ssh tentar RSA ou DSA somente chaves (versão de protocolo 2). Nos exemplos abaixo, geramos e instalamos RSA1 e DSA chaves no host remoto, de modo que você tenha mais flexibilidade. Você pode fazer um arquivo de configuração no seu .ssh diretório com a linha

Protocol 1,2

Isto faz ssh tente um RSA1 (versão de protocolo 1) antes de RSA / DSA (versão de protocolo 2).

Usando chaves RSA1

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

Usando chaves DSA

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

Isso é tudo o que você precisa fazer se não usar uma frase secreta ao gerar as chaves. Você pode testar a conexão executando ssh $ remote e ver se você pode logar sem dar uma senha (você pode precisar usar -1 ou -2 como opções para ssh). O procedimento pode, é claro, ser repetido para qualquer máquina na qual você queira se conectar.

Se você usou uma passphrase, você terá que executar o programa ssh-agent para iniciar um shell especial, seguido por ssh-add para registrar seu key / passphrase combinação com sshd. Veja as páginas de manual para estes programas para mais informações.

Um script para automatizar conexões sem senha: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

copiado de: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


3
2017-09-14 08:27





Para fazer algumas adições:

  • Mac por padrão não tem ssh-copy-id, você terá que instalar você mesmo:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

encontre mais aqui: https://github.com/beautifulcode/ssh-copy-id-for-OSX

  • Se você fez um encaminhamento de porta, o comando deve ser assim:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

note que as cotações são necessárias.


2
2017-09-14 12:14