adicionando senha ao .ssh / config

24

Estou usando o ubuntu 12.04. Estou usando o ssh para conectar-se a muitos servidores diariamente, então coloquei seus parâmetros no arquivo .ssh / config ; como isso :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

Existe uma maneira de colocar senhas neste arquivo, para cada conexão? Portanto, quando o servidor solicita uma senha, o terminal coloca seu passe e o envia ao servidor, portanto, não preciso digitar a senha todas as vezes. Além disso, não quero usar o par de chaves pública / privada.

Ajo Augustine
fonte
10
É para isso que servem os pares de chaves.
Michael Hampton

Respostas:

31

Não, não existe um método para especificar ou fornecer na linha de comando a senha de maneira não interativa para autenticação ssh usando um mecanismo interno openssh. Pelo menos não um que eu saiba. Você pode codificar sua senha no script de espera, mas também não é uma boa solução.

Você definitivamente gostaria de usar pares de chaves para autenticação sem senha, como Michael afirmou, no final, a chave privada é praticamente uma senha grande no arquivo.

Danila Ladner
fonte
O problema é que os servidores são meus clientes e eles não permitem o login usando chaves. Estou escrevendo um script bash usando esperar para logon em todos os servidores em que as credenciais estão sendo armazenadas e obtidas de um dispositivo de armazenamento USB. Obrigado
Ajo Augustine
1
Bastante inseguro. A única coisa a sugerir nesse script para bloquear esse arquivo com permissões de arquivo difíceis.
Danila Ladner
1
Se eles não permitem chaves, eles entendem mal como o ssh funciona - permitir o login com senha abre você para ataques de dicionário etc. (embora muito, muito lentos) - é quase impossível realizar o mesmo com um par de chaves privadas e se eles Se você está preocupado com as chaves que caem nas mãos erradas, é possível criptografar com senha a parte privada da chave, para que você precise de dois fatores para poder usá-la (a senha também pode ser lembrada no seu chaveiro / pelo seu agente ssh )
Alex Berry em
Eduque seus clientes. Explique-lhes que é melhor desativar a autenticação por senha e permitir apenas chaves que sejam inversas.
Nikita Kipriyanov
20

Para evitar a sequência de comentários: Sim, isso é inseguro (nem mesmo inseguro). Eu recomendo fortemente que você faça isso apenas em uma situação de laboratório em uma rede isolada ou em uma situação semelhante que não envolva servidores de produção ou servidor de produção potencialmente sem uma redefinição / formato completo.

Eu queria configurar isso, pois não acho que meu switch 2950 suporte chaves privadas / públicas e espero que, em algum momento, obtenha esse conhecimento, mas ainda não estou lá.

Usando um alias e sshpass, isso pode ser feito.

  1. Instalar sshpass
  2. Altere seu arquivo .ssh / config para incluir o nome de usuário listado na pergunta
  3. Adicione um alias ao seu terminal (usei .bashrc e recomendaria contra as configurações do gloabl)
  4. Use o alias para fazer login no destino

Meu exemplo de alias é:

alias ssc='sshpass -pcisco ssh'

Onde "cisco" é a senha. Observe que não há espaço entre o -p e a senha.

O uso é (referenciando a pergunta):

ssc server1

Nota: Isso responde à pergunta no título apenas para aqueles que usam mecanismos de pesquisa. Se você estiver usando servidores como o exemplo da pergunta, pares de chaves pública / privada e não esta resposta devem ser usados

DarkSheep
fonte
A única solução possível, quando você realmente não pode trabalhar com chaves por qualquer motivo.
sjas 29/09/16
Trabalho! Impressionante.
Rahul
Eu sugeriria substituir o alias por um script de shell completo; isso daria a oportunidade de selecionar dinamicamente qual arquivo de senha usar, dependendo do parâmetro do host.
7heo.tk
Um pode muito bem colocar um espaço entre -p e a senha, como é frequentemente o caso com programas cli ...
masterxilo
10

Sim, como mencionado acima, não há como salvar a senha simplesmente. Eu recomendaria usar a chave ssh para autorização.

primeiro, gere sua chave:

ssh-keygen

Em seguida, copie a chave nos seus servidores / desktops:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

Isso é tudo. Você nunca será solicitado a senha novamente.

Também recomendo remover a autorização de senha em geral, mas isso depende de você.

Str82DHeaD
fonte
1
Obrigado pela referência ao ssh-copy-id! Eu costumava usar algumas engenhocas, sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"mas esse programa é mais limpo e deixa clara a intenção.
Masterxilo # 18/18
3

Não há como fazer isso com o ssh, é o mais inseguro possível.

Como Danila mencionou, você poderia usar scripts de expectativa, mas eu não me incomodaria.

Eu me pergunto o que você está tentando alcançar? Deseja pular de um servidor para outro? Nesse caso, você deseja configurar e usar o ssh-agent em sua estação de trabalho e habilitar o encaminhamento do agente nos hosts de destino; dessa maneira, a troca de credenciais será roteada para o seu agente local sem precisar copiar sua chave privada.

Eddy
fonte
O VisualStudio tem o conceito de tokens de acesso pessoal, como senhas específicas de aplicativos, nas quais esse recurso seria útil.
Spuder #
1

Eu uso esse script do ~/.local/bindiretório

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

O que me permite especificar a senha como #PS <password>no .ssh/configarquivo.

Mas, como todo mundo diz, é melhor usar ssh-keyscom ssh-agentquando é possível

mnach
fonte
0

A maneira correta de lidar com essa situação é usar um agente ssh baseado em sessão. Aqui está como:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

A senha será mantida válida pelo restante da sessão. Você só precisa executar o primeiro comando uma vez e pode adicionar quantas chaves desejar depois disso. Quando a sessão é encerrada, o agente também é, para que não haja armazenamento codificado de uma senha.

Chocado que, depois de tanto tempo, essa resposta não estivesse aqui!

pranalli
fonte
A razão pela qual não estava lá é provavelmente porque o pôster disse especificamente que ele não deseja usar o par de chaves pública / privada.
Jenny D diz Restabelecer Monica
1
Eu senti falta disso, obrigado. Depois, acrescentarei que não usar um par de chaves para SSH é uma idéia muito, muito ruim. É mais seguro E mais conveniente ... Exorto o OP a reconsiderar. Usar um par de chaves sem senha é muito mais seguro do que um par de chaves e uma senha. Mas, idealmente, alguém usaria um par de chaves com uma senha e usaria as etapas que eu forneci se / quando elas estiverem em uma sessão que exija armazenamento de sua senha.
pranalli 11/04
-1

Você pode fazer isso de maneira mais segura usando sshpass

  1. Defina sua senha sem histórico

    exportar PS = sua_senha ; histórico -d $ (histórico 1)

  2. Defina o alias do host como acima em ~ / .ssh / config

  3. Use ssh pass para usar a variável de ambiente e efetue login na máquina necessária em um único comando

sshpass -p $ PS ssh host_alias

Seu ambiente está mantendo sua senha e é arriscado que qualquer script em execução possa vazar essa senha se você não souber o que está executando.

ashishWaghmare
fonte
Não, isso não é seguro. E é muito feio.
7heo.tk
Essa "solução" não é mais longa que o problema? Todas essas etapas extras e você ainda precisa digitarsshpass -p $PS ...
Dan H