Adicionei a chave pública SSH ao arquivo allowed_keys . ssh localhost
deve me conectar sem pedir a senha.
Eu fiz isso e tentei digitar ssh localhost
, mas ele ainda me pede para digitar a senha. Existe outra configuração pela qual eu tenho que passar para fazer funcionar?
Eu segui as instruções para alterar permissões:
Abaixo está o resultado, se eu fizer ssh -v localhost
.
debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Em seguida, solicita uma fase de passagem após o log acima. Por que não está me conectando sem uma senha?
ssh
public-key
authorized-keys
user482594
fonte
fonte
Respostas:
Você precisa verificar as permissões do
authorized_keys
arquivo e as pastas pai / pasta em que ele está localizado.Para mais informações, consulte esta página .
Você também pode precisar alterar / verificar as permissões do seu diretório pessoal para remover o acesso de gravação para o grupo e outros.
fonte
chmod go-wrx foobar
suficiente. Fazer isso recursivamente pode afetar seriamente alguns aplicativos se você tiver algum grupo ou outro acesso aos arquivos, especialmente se for um diretório da web.chmod go-w $HOME $HOME/.ssh
será feito). Portanto, as permissões podem ser tão "abertas" quanto 755 para os dois diretórios, se você quiser. Os comandos mais simples / menos invasivos estão no FAQ: openssh.org/faq.html#3.14chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys
? 600 não funcionou, onde 644 fez ...sudo chown -R {$USER}:{$USER} ~/.ssh/
porque havia escrito oauthorized_keys
arquivo como root.O SELinux também pode fazer com que as teclas_autorizadas não funcionem. Especialmente para root no CentOS 6 e 7. No entanto, não é necessário desativá-lo. Depois de verificar se suas permissões estão corretas, você pode corrigir isso da seguinte maneira:
fonte
restorecon
é o que você precisa depois de ter copiado os arquivos à mão, por exemplo, para um novo disco rígido. (Você provavelmente deve executá-lo em todos os arquivos neste caso poderia corrigir outros problemas estranhos..)definir ssh author_keys parece simples, mas esconde algumas armadilhas que estou tentando descobrir
-- SERVIDOR --
em / etc / ssh / sshd_config configurado
passwordAuthentication yes
para permitir que o servidor aceite temporariamente a autenticação por senha-- CLIENTE --
1. gerar chaves públicas e privadas (lado do cliente)
# ssh-keygen
aqui, pressionando apenas ENTER, você obtém os arquivos PADRÃO 2 " id_rsa " e " id_rsa.pub " em ~ / .ssh / mas se você der um nome para a chave, os arquivos gerados são salvos no seu pwd
2. coloque o your_key.pub no computador de destino
ssh-copy-id user_name@host_name
se você não criou a chave padrão, este é o primeiro passo para dar errado ... você deve usar
ssh-copy-id -i path/to/key_name.pub user_name@host_name
3. o log
ssh user_name@host_name
funcionará apenas para id_rsa padrão, então aqui está a segunda armadilha para você precisarssh -i path/to/key_name user@host
(use a opção ssh -v ... para ver o que está acontecendo)
Se o servidor ainda solicitar a senha , você deu a smth. para Enter passphrase: quando você criou chaves (por isso é normal)
se o ssh não estiver escutando, a porta padrão 22 deve usar
ssh -p port_nr
-- SERVIDOR -----
4. modifique / etc / ssh / sshd_config para ter
(descomentado se for o caso)
Isso instrui o ssh a aceitar o author_keys e procurar no diretório inicial do usuário o nome do key_name sting gravado no arquivo .ssh / allowed_keys
5 definir permissões na máquina de destino
Desative também a autenticação de passe
passwordAuthentication no
fechar o portão para todas as tentativas ssh root / admin /....@ your_domain
6 garanta que a propriedade e a propriedade do grupo de todos os diretórios pessoais não raiz sejam apropriadas.
=================================================
7. considere o excelente http://www.fail2ban.org
8. TUNNEL ssh extra para acessar um servidor MySQL (bind = 127.0.0.1)
fonte
ssh-copy-id
! Esse passo por si só seria uma ótima resposta.Verifique também se o diretório inicial não é gravável por outras pessoas
A resposta é roubada daqui
fonte
chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~
funcionou para mim. Obrigado.chmod og-w /home/USERNAME
vez disso?os desesperados também podem garantir que não tenham novas linhas extras no arquivo allowed_keys devido à cópia do texto id_rsa.pub de um terminal confuso.
fonte
id_rsa.pub
usar emmore
vez decat
, o que foi fatal por causa das quebras de linha invisíveis.usuário é seu nome de usuário
fonte
mkdir -p /home/$USER/.ssh && chown -R $USER:$USER /home/$USER/.ssh && sudo -u $USER ssh-keygen -t rsa && touch /home/$USER/.ssh/authorized_keys && touch /home/$USER/.ssh/known_hosts && chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/id* && chmod 644 /home/$USER/.ssh/id*.pub && chmod 644 /home/$USER/.ssh/authorized_keys && chmod 644 /home/$USER/.ssh/known_hosts && vim /home/$USER/.ssh/authorized_keys # paste keys here!
Observe que o SELinux também pode acionar esse erro, mesmo que todas as permissões pareçam estar OK. Desativá-lo fez o truque para mim (insira isenções de responsabilidade comuns sobre desativá-lo).
fonte
/var/log/audit/audit.log
.restorecon -R -v /root/.ssh
consertou meu caso específico.Listar uma chave pública em .ssh / allowed_keys é necessário, mas não suficiente para o sshd (servidor) aceitá-la. Se sua chave privada estiver protegida por senha, você precisará fornecer a senha ao ssh (cliente) toda vez. Ou você pode usar o ssh-agent ou um equivalente do GNOME.
Seu rastreamento atualizado é consistente com uma chave privada protegida por senha. Consulte ssh-agent ou use
ssh-keygen -p
.fonte
Comando de gravação:
Depois de fazer isso, verifique se o seu diretório é assim:
fonte
O que fez o truque para mim finalmente foi garantir que o proprietário / grupo não fosse raiz, mas usuário:
fonte
Tente "ssh-add", que funcionou para mim.
fonte
Outra dica para lembrar. Como a v7.0 OpenSSH desabilita as chaves ssh DSS / DSA por padrão, devido a sua fraqueza herdada. Portanto, se você possui o OpenSSH v7.0 +, verifique se sua chave não está
ssh-dss
.fonte
No meu caso, eu precisava colocar meu
authorized_keys
arquivo.openssh
.Esta localização é especificada na
/etc/ssh/sshd_config
opçãoAuthorizedKeysFile %h/.ssh/authorized_keys
.fonte
Verifique se o usuário de destino tem uma senha definida. Corra
passwd username
para definir um. Isso foi necessário para mim, mesmo que o login SSH da senha estivesse desativado.fonte
isso resolve meu problema
fonte
Outra questão que você precisa cuidar. Se o seu arquivo gerado não for o padrão
id_rsa
eid_rsa.pub
É necessário criar o arquivo .ssh / config e definir manualmente qual arquivo de identificação você usará com a conexão.
O exemplo está aqui:
fonte
I emitido
sudo chmod 700 ~/.ssh
echmod 600 ~/.ssh/authorized_keys
echmod go-w $HOME $HOME/.ssh
de cima e fixa o meu problema em uma caixa CentOS7 que eu tinha foi cancelada as permissões ao tentar obter samba ações trabalhando. obrigadofonte
Parece um problema de permissão. Geralmente isso acontece se a permissão de algum arquivo / diretório não estiver configurada corretamente. Na maioria dos casos, eles são
~/.ssh
e~/.ssh/*
. No meu caso eles são/home/xxx
.Você pode alterar o nível de log do sshd modificando
/etc/ssh/sshd_config
(pesquiseLogLevel
, defina-o comoDEBUG
) e verifique a saída/var/log/auth.log
para ver o que aconteceu exatamente.fonte
Meu problema foi um AuthorizedKeysFile modificado, quando a automação para preencher / etc / ssh / allowed_keys ainda não havia sido executada.
fonte
Basta consultar /var/log/auth.log no servidor . Definir verbosidade adicional com -vv no lado do cliente não ajudará, porque é improvável que o servidor ofereça muitas informações a um possível invasor.
fonte
Verifique se você copiou toda a chave pública para
authorized_keys
; ossh rsa
prefixo é necessário para que a chave funcione.fonte
você precisa verificar as propriedades dos arquivos. para atribuir o uso de propriedade necessário:
fonte
Procure no
/var/log/auth.log
servidor porsshd
erros de autenticação.Se tudo mais falhar, execute o
sshd
servidor no modo de depuração:Em seguida, conecte-se a partir do cliente:
No meu caso, encontrei a seção de erro no final:
Com essas informações, percebi que
sshd_config
estava restringindo os logins aos membros dossh
grupo. O comando a seguir corrigiu esse erro de permissão:fonte
nessa nota, verifique se o sshd config possui -;
definido como acima, e reinicie o sshd (/etc/init.d/sshd restart)
saia e tente fazer login novamente!
padrão eu acredito que é -;
fonte
No meu caso, é porque o grupo do usuário não está definido no AllowGroups do arquivo de configuração / etc / ssh / sshd_config. Depois de adicioná-lo, tudo funciona bem.
fonte
Eu tenho o diretório inicial em um local não padrão e, nos
sshd
logs, tenho esta linha:mesmo se todas as permissões forem boas (veja as outras respostas).
Encontrei uma solução aqui: http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191
No meu caso particular:
adicionou uma nova linha em
/etc/selinux/targeted/contexts/files/file_contexts.homedirs
:esta é a linha original para diretórios pessoais regulares:
/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0
esta é minha nova linha:
/data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0
seguido por um
restorecon -r /data/
e umsshd
reiníciofonte
Eu tive esse problema e nenhuma das outras respostas o resolveu, embora, é claro, as outras respostas estejam corretas.
No meu caso, descobriu-se que o
/root
diretório em si (não por exemplo/root/.ssh
) tinha as permissões erradas. Eu precisei:Obviamente, essas permissões devem ser algo assim (talvez
chmod 770
) independentemente. No entanto, especificamente impedidosshd
de trabalhar, mesmo que/root/.ssh
e/root/.ssh/authorized_keys
ambos tinham permissões e proprietários corretos.fonte
Eu tive esse problema quando adicionei o grupo do usuário de logon a outro usuário. Digamos que exista um usuário ssh-login chamado userA e um usuário não ssh-login userB. userA também possui o grupo userA. Eu modifiquei o userB para ter o grupo userA também. O lead para o comportamento descrito, para que o userA não possa efetuar login sem um prompt. Depois de remover o grupo userA do userB, o login sem aviso funcionou novamente.
fonte