Quero poder efetuar login em um controle remoto via ssh sem precisar digitar a senha o tempo todo.
- Como faço para configurá-lo?
- É necessário um comando diferente para executar uma sessão sem senha?
Quero poder efetuar login em um controle remoto via ssh sem precisar digitar a senha o tempo todo.
Respostas:
Execute estes comandos:
ssh-keygen
Então você precisará copiar a nova chave no seu servidor :
ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
Após a cópia da chave, ssh na máquina normalmente:
ssh user@host
Agora você pode fazer login sem digitar uma senha da máquina específica em que executou os comandos.
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.
Isso pressupõe que você já pode se conectar com sucesso ao seu servidor via SSH.
Você precisará gerar um par de chaves SSH que permitirá que você se identifique sem usar uma senha. Você pode optar por proteger as chaves com uma senha, se desejar, mas isso pode ser deixado em branco, permitindo o acesso SSH totalmente sem senha.
ssh-keygen
isso criará um arquivo id_rsa
e id_rsa.pub
. O pub
arquivo é o que se passa nos servidores, a chave privada ( id_rsa
) é o que fica com você e é como você se identifica.ssh-copy-id user@server
substituindo user por seu usuário e servidor remoto pelo nome DNS ou endereço IP da máquina. Ele solicitará sua senha SSH, digite-a e, se tudo for concluído com êxito, você poderá acessar a máquina via ssh user@server
sem precisar de uma senha.ssh-keygen
siga as instruções na tela, em seguida, digite ssh-copy-id user@server
substituindo usuário com o usuário remoto e servidor com a máquina remota
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
A maneira como eu costumo fazer isso é a seguinte:
ssh-keygen -t rsa
(Quando for solicitada 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 allowed_keys)
Obviamente, substitua o nome de usuário pelo nome de usuário desejado e o nome de host pelo nome de host ou endereço IP desejado.
Depois disso, apenas SSH para essa caixa como você está acostumado.
touch
e chmod
na resposta de Rinzwind?
.ssh/authorized_keys
arquivo para 0600 ou isso não vai funcionar
Eu normalmente uso sshpass
para isso, instalo sudo apt-get install sshpass
e uso assim
sshpass -p 'password' ssh your_username@your_server
sshpass
é um hack muito útil nos casos em que você não pode alterar o método de autenticação no servidor remoto!
Desativar autenticação de senha
Como muitas pessoas com servidores SSH usam senhas fracas, muitos atacantes online procuram um servidor SSH e começam a adivinhar senhas aleatoriamente. Um invasor pode tentar milhares de senhas em uma hora e adivinhar até a senha mais forte, com tempo suficiente. A solução recomendada é usar chaves SSH em vez de senhas. Para ser tão difícil de adivinhar quanto uma chave SSH normal, uma senha teria que conter 634 letras e números aleatórios. Se você sempre conseguir fazer login no seu computador com uma chave SSH, desabilite completamente a autenticação por senha.
Se você desabilitar a autenticação por senha, somente será possível conectar-se a computadores que você aprovou especificamente. Isso melhora enormemente sua segurança, mas torna impossível a conexão com seu próprio computador a partir do PC de um amigo sem pré-aprovar o PC ou a partir do seu laptop quando você acidentalmente excluir sua chave.
É recomendável desativar a autenticação de senha, a menos que você tenha um motivo específico para não fazê-lo.
Para desativar a autenticação por senha, procure a seguinte linha no seu arquivo sshd_config:
#PasswordAuthentication yes
substitua-o por uma linha parecida com esta:
PasswordAuthentication no
Depois de salvar o arquivo e reiniciar o servidor SSH, você não deve nem ser solicitado por uma senha ao fazer login.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
todos os usuários? Caso contrário, como faço para desativá-lo para usuários normais, mas o deixo inalterado para root enquanto estou testando? Eu realmente não quero me enganar e me trancar completamente.
Permission denied (publickey).
com PasswordAuthentication no
. O que devo fazer? Eu mudo PasswordAuthentication no
em outro host?
Esta solução é especificamente para usuários que usam o Windows para ssh em suas máquinas remotas, incluindo imagens em nuvem na AWS Cloud e GCE Cloud
Recentemente, usei esta solução para fazer login remoto de novas imagens de vm implantadas no GCE.
puttygen
puttygen baixarwinscp
download winscpSe você possui uma chave privada:
Abra puttygen
, pressione o botão carregar e selecione seu *.pem
arquivo de chave privada ( ).
Se você não possui uma chave privada:
puttygen
,(da fonte 1, link fornecido abaixo)
notepad
)Copie os dados da chave pública da seção "Chave pública para colar no arquivo OpenSSH allowed_keys" do PuTTY Key Generator e cole os dados da chave no authorized_keys
arquivo.
Verifique se há apenas uma linha de texto nesse arquivo.
Carregue o arquivo allowed_keys no diretório inicial na máquina remota.
Criar .ssh
diretório (se não existir)
Copie o authorized_keys
arquivo para o .ssh
diretório
(isso substituirá qualquer authorized_keys
arquivo existente , observe isso).
Se o arquivo existir, basta adicionar o conteúdo desse arquivo ao arquivo existente.
Execute comandos para definir permissões:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Agora você poderá ssh
acessar a máquina remota sem inserir credenciais todas as vezes.
Se você criar um par de chaves público / privado e efetuar login usando nossa chave pública recém-criada, não precisará digitar sua senha. Dependendo da configuração do seu conjunto de chaves e / ou agente ssh, pode ser necessário proteger sua chave com uma senha.
Aqui está um dos muitos breves tutoriais para você. É de importância crucial para a segurança desse método, que a chave privada gerada permaneça privada! Você nunca deve compartilhá-lo com ninguém ou permitir o acesso em qualquer capacidade.
Este comando gera uma chave razoavelmente forte 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 authorized_keys
arquivo do servidor transportando-o por uma mídia transportável (pen drive) ou ativando brevemente a autenticação por senha no servidor, usando ssh-copy-id ~/.ssh/id_rsa.pub username@server
e desativando-o novamente.
Se você optar por proteger sua chave com uma frase secreta (na primeira etapa), poderá usar ssh-agent
o chaveiro Ubuntu para proteger esse farse localmente, para que você não precise digitá-lo o tempo todo.
Para fazer algumas adições:
Por padrão, o Mac não possui ssh-copy-id
, você deverá instalá-lo:
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"
observe que as aspas são necessárias.
Os aplicativos ssh
e scp
para logon remoto e cópia remota, respectivamente, permitem a comunicação 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, a máquina na qual você deseja fazer logon sem fornecer uma senha. As etapas do procedimento de autenticação são:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
ou $HOME/.ssh/authorized_keys2
ao servidor.Existem três tipos diferentes de protocolos de autenticação. Você especifica o tipo ao executar o ssh-keygen:
chmod 0700
garantir que esse arquivo não seja legível para outras pessoas) e identity.pub (chave pública).ssh-keygen -t rsa
e resulta em arquivos id_rsa
(chave privada) e id_rsa.pub
(chave pública)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 (o que implica que você não fornece uma senha). Isso torna toda a configuração simples, mas também insegura.
Você pode especificar o tipo de chave a ser usado por uma opção para ssh ; ssh -1
força o uso de chaves RSA1 (versão do protocolo 1), enquanto ssh -2
força o ssh a experimentar apenas as chaves RSA ou DSA (versão do protocolo 2). Nos exemplos abaixo, geramos e instalamos chaves RSA1 e DSA no host remoto, para que você tenha mais flexibilidade. Você pode criar um arquivo de configuração em seu .ssh
diretório com a linha
Protocol 1,2
Isso faz com que o ssh tente uma conexão RSA1 (protocolo versão 1) antes do RSA / DSA (protocolo versão 2).
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"
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 tiver usado uma senha durante a geração das chaves. Você pode testar a conexão executando o ssh $ remote e veja se consegue efetuar login sem fornecer uma senha (pode ser necessário usar -1
ou -2
como opções para o ssh ). Obviamente, o procedimento pode ser repetido para qualquer máquina na qual você deseja fazer logon.
Se você usou uma senha, precisará executar o programa ssh-agent
para iniciar um shell especial, seguido de ssh-add
para registrar sua combinação de chave / senhasshd
. Consulte as páginas de manual desses programas para obter mais informações.
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
Gostaria de adicionar uma resposta para aqueles que acharem que devem digitar a senha, mesmo que tenham lido todas as respostas aqui, porque você definiu 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 lerner@192.168.20.160
Eu achei que não funcionou.
Depois fui verificar o ~/.ssh/config
arquivo no cliente, vi isso na parte inferior:
Host *
IdentitiesOnly yes
Então eu adiciono isso acima:
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
Eu posso fazer login entrando ssh somename
.
Em seguida, você pode adicionar várias chaves ssh usando seus nomes favoritos e você só precisa adicionar as configurações como as quatro linhas acima ao arquivo de configuração.
Host é o nome que você gostaria de inserir quando conectar o servidor posteriormente; o HostName é o ip do servidor; Usuário é o nome de usuário que você efetua login no servidor; e o arquivo de identidade é o arquivo em que você armazena a chave que você gerou.