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:
- 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
.
- 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:
-
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).
-
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)
-
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