SSH sem senha com local do arquivo de identidade não padrão

16

Como parte de um script de inicialização, tenho que abrir automaticamente várias janelas do terminal gnome, um desses terminais envia automaticamente:

ssh [email protected]

A limitação disso é que ainda preciso digitar uma senha para concluir a conexão SSH.

O que eu quero fazer é que meu script inicie o comando e conclua a conexão. Nesse sentido, tentei seguir as instruções descritas na resposta aceita aqui .

No sistema em que desejo me conectar, executei:

ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key

Em seguida, solicitou que eu digite uma senha. Deixei isso em branco, pois não tinha certeza do que seria, então presumi que definir um exigiria desbloqueá-lo com a frase secreta toda vez que eu o usasse.

Continuando com as instruções acima, executei e recebi o seguinte:

ssh-copy-id user@IP
ERROR: No identities found

Uma pesquisa rápida revelou que eu precisava especificar o local da chave, pois ela não estava no local de salvamento padrão, então resolvi:

ssh-copy-id -i /home/user/ssh/keys/server1key.pub [email protected]

Depois de pedir a senha do servidor, ele adicionou a chave com sucesso. No entanto, ao tentar fazer login com "ssh user @ IP", ainda era solicitada a senha.

Tanto quanto sei, segui as instruções vinculadas corretamente, ou estou faltando alguma coisa ou talvez uma configuração existente esteja me impedindo de fazer com que isso funcione?

Ambos os sistemas usam 18.04 e openssh.

hiigaran
fonte
Então, eu preciso especificar o local do arquivo .pub ao enviar o comando SSH?
hiigaran
Eu tenho uma maneira um pouco diferente de organizar meus arquivos, daí os locais não padrão, mas vocês ajudaram bastante. Obrigado. Sinta-se livre para fazer uma resposta que eu possa aceitar.
hiigaran

Respostas:

35

Ele falha pelo mesmo motivo que ssh-copy-idfalhou na primeira vez - ou seja, porque você escolheu um local não padrão para o arquivo de identidade.

Você pode resolvê-lo da mesma forma, adicionando -i /home/user/ssh/keys/server1keyao seu sshcomando - nota que o lado do cliente precisa a localização da privada arquivo de chave.

A partir de man ssh

 -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
         ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.

Como alternativa, você pode criar uma ~/.ssh/configentrada de arquivo para o host ao longo das linhas de

Host            somename
Hostname        192.168.1.3
User            user
IdentityFile    /home/user/ssh/keys/server1key
chave de aço
fonte
11
Eu sempre assumi que o arquivo de configuração exigia recuo - vejo que não é esse o caso. Intrigante.
Boris the Spider
Qualquer pessoa que usa o OpenSSH deve ter um ~/.ssh/config, caso contrário, o OpenSSH usa o padrão geral do sistema /etc/ssh/ssh_config. Em alguém encontrar casos que é útil, eu enviou um ssh_config pré-construído ao meu GitHub um tempo atrás como um ponto de partida para os usuários que podem não ter tempo para ler a página de manual ssh_config
JW0914
@ JW0914 isso é apenas meia verdade: os valores individuais ~/.ssh/configsubstituirão os do global ssh_config, mas apenas ter o arquivo não desativará a configuração geral do sistema.
Sebastian Stark
@SebastianStark Talvez você tenha interpretado mal o meu comentário, pois nunca afirmei que isso iria desativar a configuração geral do sistema. O que eu afirmei foi 100% preciso.
JW0914
2

Outro motivo que ssh-copy-idfalha é que a chave não foi adicionada ao agente SSH.

Primeiro, verifique e inicie se ssh-agent estiver em execução:

eval "$(ssh-agent -s)"

Se você entrar no ID do processo, poderá adicionar sua chave:

ssh-add -k /home/user/ssh/keys/server1key

Com -kvocê, adicione a chave ao chaveiro.

Verifique se as chaves foram adicionadas com:

ssh-add -l

ssh-copy-id deve estar trabalhando agora.

Martijn
fonte
-1

Espero que isso funcione para você. "Sshpass -p yourpassword", ele fará o login automaticamente no host remoto.

[root @ localhost .ssh] # sshpass -p senha123 ssh -l root localhost

JackyChan
fonte
-1

Basta executar 2 comandos:

ssh-keygen
ssh-copy-id

Resposta longa:

user@ip:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): temp_file
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in stemp.
Your public key has been saved in stemp.pub.
The key fingerprint is:
SHA256:5**M user@ip
The key's randomart image is:
+---[RSA 2048]----+
|  ...            |
| ...             |
| ..              |
| ..+.    o .     |
|                 |
|    B            |
|                 |
|=      *         |
|=+   o .         |
+----[SHA256]-----+

E depois:

user@ip:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ipDestination -p portDest
Mohsen Abasi
fonte