Como posso configurar o login SSH sem senha?

229

Eu quero poder logar em 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?
por Oxwivi 04.06.2011 / 19:24

10 respostas

237

Resposta

Execute estes comandos:

ssh-keygen

Então você precisará copiar a nova chave do 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 par de chaves SSH executando ssh-keygen . Isso criará um arquivo id_rsa e id_rsa.pub . O arquivo pub é 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 remoto e servidor com o nome DNS da máquina ou o endereço IP. 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 senha.

Referências

por Rinzwind 04.06.2011 / 19:36
32

Digite os seguintes comandos:

  1. ssh-keygen

    Pressione a tecla Enter até obter o prompt

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

    (uma vez perguntará pela senha do sistema host)

  3. ssh root@ip_address

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

    
por Ravindra 17.05.2013 / 10:45
21

A maneira como 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.

    
por kyentei 04.06.2011 / 20:22
18

Eu normalmente uso sshpass para isso, instalo com sudo apt-get install sshpass e uso assim

sshpass -p 'password' ssh your_username@your_server
    
por Bruno Pereira 06.12.2011 / 18:26
9

Esta solução é especificamente para usuários que usam Windows para ssh em suas máquinas remotas, incluindo imagens em nuvem na AWS Cloud e GCE Cloud

Aviso de isenção

Utilizou recentemente esta solução para o login remoto de novas imagens de vm implantadas no GCE.

Ferramentas usadas:

  1. puttygen download puttygen
  2. winscp download do winscp

Etapas para realizar:

  1. Gere um par de chaves pública / privada usando o puttygen.
  2. Faça o upload de uma chave pública para seu servidor na nuvem ou em um local remoto.

Como fazer:

1. Gere uma chave / par ou use chave privada existente

Se você possui uma chave privada:

Abra puttygen , pressione o botão carregar e selecione seu arquivo de chave privada ( *.pem ).

Se você não possui uma chave privada:

  • Abra puttygen ,
  • Selecione o tipo de chave desejada SSH2 DSA (você pode usar RSA ou DSA) na seção Parâmetros . É importante que você deixe o campo de frase secreta em branco.
  • Pressione generate e siga as instruções para gerar o par de chaves (público / privado).

(dafonte1,linkdadoabaixo)

2.Crieumnovoarquivo'authorized_keys'(comnotepad)

Copieosdadosdachavepúblicadaseção"Chave pública para colar no arquivo authorized_keys do OpenSSH" do PuTTY Key Generator e cole os dados da chave no arquivo authorized_keys .

Certifique-se de que haja apenas uma linha de texto nesse arquivo.

3. Carregar chave para o servidor Linux

  • Abra o WinSCP,
  • Selecione o protocolo de arquivos SFTP e faça login com suas credenciais ssh.
  • Em caso de sucesso, você vê a estrutura do diretório inicial em sua máquina remota.

Envie o arquivo authorized_keys para o diretório inicial na máquina remota.

4. Definir permissões adequadas

Crie o diretório .ssh (se não existir)

Copie o arquivo authorized_keys para o diretório .ssh .
(isso substituirá qualquer arquivo authorized_keys existente, tome nota disso).

Se o arquivo existir, simplesmente adicione o conteúdo deste arquivo ao arquivo existente.

Execute comandos para definir permissões:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

Agora, você poderá ssh na máquina remota sem inserir as credenciais todas as vezes.

Leitura adicional:

por devprashant 20.11.2015 / 10:07
7

Disable Password Authentication

Because a lot of people with SSH servers use weak passwords, many online attackers will look for an SSH server, then start guessing passwords at random. An attacker can try thousands of passwords in an hour, and guess even the strongest password given enough time. The recommended solution is to use SSH keys instead of passwords. To be as hard to guess as a normal SSH key, a password would have to contain 634 random letters and numbers. If you'll always be able to log in to your computer with an SSH key, you should disable password authentication altogether.

If you disable password authentication, it will only be possible to connect from computers you have specifically approved. This massively improves your security, but makes it impossible for you to connect to your own computer from a friend's PC without pre-approving the PC, or from your own laptop when you accidentally delete your key.

It's recommended to disable password authentication unless you have a specific reason not to.

To disable password authentication, look for the following line in your sshd_config file:

#PasswordAuthentication yes

replace it with a line that looks like this:

PasswordAuthentication no

Once you have saved the file and restarted your SSH server, you shouldn't even be asked for a password when you log in.

link

    
por Thufir 15.02.2015 / 02:10
4

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 vários resumo 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 dele em qualquer capacidade.

Este comando gera uma chave razoavelmente strong em ~/.ssh/ :

ssh-keygen -b 4096

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

Se você escolheu proteger sua chave com uma frase secreta (na primeira etapa), você pode usar ssh-agent ou o chaveiro do Ubuntu para proteger essa pharse localmente para que você não tenha que digitá-la o tempo todo.

    
por con-f-use 04.06.2011 / 19:32
3

Login / cópia remotos sem fornecer uma senha

Os aplicativos 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 o 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. Anexe 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. Versão do protocolo SSH 1, RSA1: essa é a opção padrão e resulta na identidade dos arquivos (chave privada, deve levar chmod 0700 para garantir que esse arquivo não seja legível para outros ) e identity.pub (chave pública).
  2. Versão do protocolo SSH 1, RSA : isso é obtido executando ssh-keygen -t rsa e resulta nos arquivos id_rsa (chave privada) e id_rsa.pub (chave pública)
  3. Versão do protocolo SSH 1, DSA : isso é obtido executando ssh-keygen -t dsa e resulta nos 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 senha). Isso torna toda a configuração simples, mas também insegura.

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

Protocol 1,2

Isso faz com que o ssh tente uma conexão RSA1 (versão do protocolo 1) antes de RSA / DSA (versão do 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 pode efetuar login sem fornecer uma senha (talvez seja necessário 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 frase secreta, será necessário executar o programa ssh-agent para iniciar um shell especial, seguido de ssh-add para registrar sua chave / senha longa 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: link

    
por αғsнιη 14.09.2014 / 10:27
2

Para fazer algumas adições:

  • Por padrão, o Mac não tem ssh-copy-id , você precisará instalá-lo 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: link

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

    ssh-copy-id "[email protected] -p 2222"
    

observe que as aspas são necessárias.

    
por samluthebrave 14.09.2013 / 14:14
1

Gostaria de adicionar uma resposta para aqueles que podem descobrir que devem digitar a senha, mesmo que tenham lido todas as respostas aqui porque você configurou o IdentitiesOnly como sim. E a resposta aqui pode economizar muito tempo para gerenciar várias chaves, sendo chaves para git ou servidor.

Depois de gerar a chave e copiá-la para o servidor:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub [email protected]

Eu achei que não funcionou.

Depois fui verificar o arquivo ~/.ssh/config no cliente, vi no final:

Host *
IdentitiesOnly yes

Depois, adiciono isso acima:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

Eu posso fazer login inserindo ssh somename .

Então você pode adicionar várias chaves ssh usando seus nomes favoritos, e você só precisa adicionar as configurações como as quatro linhas acima no arquivo de configuração.

Host é o nome que você gostaria de inserir ao conectar o servidor mais tarde; o HostName é o ip do servidor; Usuário é o nome de usuário que você registra no servidor; e o arquivo de identidade é o arquivo onde você armazena a chave que você gerou.

    
por lerner 24.01.2018 / 10:08