Minicluster:Ssh
Programas rodando com MPICH sobre várias máquinas precisam se comunicar com outras máquinas como se fossem o próprio usuário. Isto significa que o usuário precisa estar apto a se conectar com SSH nas máquinas escravo sem usar senha.
Importante: As permissões do arquivo tem que ser 600. Talvez umas configurações extras para /etc/hosts
Índice
Setando SSH sem senha para usuários atuais
Em uma máquina com NFS isto é fácil (não o caso ainda). Conecte-se como o usuário e rode
[usuario@one] $ ssh usuario@cell100 (será pedido senha) [usuario@cell100] $ ssh-keygen
- Tecle enter para confirmar o arquivo
.ssh/id_rsa
- Tecle Enter sem uma senha 2 vezes quando perguntado. Isto criará dois novos arquivos no diretório
/home/usuario/.ssh
: sua chave privada (id_rsa) e sua chave pública (id_rsa.pub).
[usuario@cell100] $ cd .ssh [usuario@cell100] $ ls
Crie um arquivo chamado authorized_keys
. Este arquivo é responsável por dizer quem é permitido SSH nesta máquina como este usuário e sem senha. A chave pública precisa ser adicionada neste arquivo
cat id_rsa.pub >> authorized_keys
A permissão deve ser somente para o usuário:
chmod 600 authorized_keys
Neste ponto, você deveria estar apto a logar-se sem senha na própria máquina
ssh localhost
Sem senha para o root
Para permitir que o usuário root não informe a senha utilize no mestre
[root@one] $escravo=cell108 [root@one] ssh $escravo mkdir -p .ssh [root@one] cat .ssh/id_rsa.pub | ssh $escravo 'cat >> .ssh/authorized_keys'
uma vez para cada nó escravo. Ou seja, mude $escravo=cell109, e use os dois comandos seguintes. Depois disso não deveria ser necessário mais informar a senha.
Script para todos os usuários atuais
Ao invés de se tornar cada usuário e fazer isso a mão, o processo pode ser scripted. Como root, edite o texto
[root@one]$ vi autoriza_ssh.sh #!/bin/bash # Cria uma chave SSH para cada usuario existente e cria # um arquivo authorized_keys com chave publica. # Diretorio home contendo os usuarios homeDirs=/shared/home for x in `ls $homeDirs`; do echo Criando chave SSH para $x... if [[ -e $homeDirs/$x/.ssh/id_rsa.pub ]]; then echo "$x ja tem uma chave publica" else su $x -c "ssh-keygen -N \"\"" fi cat $homeDirs/$x/.ssh/id_rsa.pub >> $homeDirs/$x/.ssh/authorized_keys chown $x $homeDirs/$x/.ssh/authorized_keys chmod 600 $homeDirs/$x/.ssh/authorized_keys done
Troque o valor de homeDirs
para o valor correto. (homeDirs
é o diretório no sistema de arquivos montado onde os diretórios de usuários são armazenados.)
Troque a permissão do usuário para executável
chmod u+x autoriza_ssh.sh
Rode o script
./autoriza_ssh.sh
Será perguntado onde por os arquivos para cada usuário. (Faltou tempo para por no scritpt.) Tecle enter e confirme o default.
Password-Less SSH for Future Users
Ideally, this script could be set to run every time a new user account is created. Still, the above can be changed to an interactive script that takes a username to create an SSH key for, and you can run it whenever you create a new user.
Again, you'll need to change it to be executable and also correct the value of homeDirs
.
#!/bin/bash # Creates an SSH key and an authorized_keys file for # a username given as an argument. # Directory containing user home directorys homeDirs=/home/shared if ! [[ "$1" ]] then echo "Usage: ./sshauthhostkeygen username" exit 1 fi x=`echo $1` echo Creating SSH key for $x... if ! id $x > /dev/null 2>&1 then echo $x is not a valid user. exit 1 fi if ! [[ -e $homeDirs/$x ]]; then echo $x does not have a home directory. exit 1 fi if [[ -e $homeDirs/$x/.ssh/id_rsa.pub ]]; then echo "$x already has a public key" else su $x -c "ssh-keygen -N \"\"" fi cat $homeDirs/$x/.ssh/id_rsa.pub >> $homeDirs/$x/.ssh/authorized_keys chown $x:$x $homeDirs/$x/.ssh/authorized_keys chmod 600 $homeDirs/$x/.ssh/authorized_keys
Preventing Logins
While this is necessary for processes running on behalf of the user, users probably shouldn't be able to do code development and other tasks on the worker nodes themselves. To prevent shell logins (other than root), just run
touch /etc/nologin
You'll still be able to SSH in as root and then su
to that user.
ssh-keygen: password-less SSH login
via .rhosts
Uma maneira é criar o arquivo .rhosts com o nome do sistema remoto e usuário que você confia:
[user] vi .rhosts outra.maquina.net usuario .. [user] chmod 600 .rhosts
Assim o usuario pode ser conectar de outra.maquina.net sem usar a senha.
Mas, o SSH deve ser configurado para confiar em .rhosts (que não é o padrão), e o par de chaves privada/pública de cada sistema deve ser propriamente setado no arquivo de chaves públicas ssh_known_hosts.
Método 2
Não requer .rhosts e nem administrador. Requer apenas que você gere um par de chaves pública/privada.
ssh-keygen is used to generate that key pair for you. Here is a session where your own personal private/public key pair is created:
cantin@sodium:~> ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/cantin/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/cantin/.ssh/id_rsa. Your public key has been saved in /home/cantin/.ssh/id_rsa.pub. The key fingerprint is: f6:61:a8:27:35:cf:4c:6d:13:22:70:cf:4c:c8:a0:23 cantin@sodium
The command ssh-keygen -t rsa initiated the creation of the key pair.
No passphrase was entered (Enter key was pressed instead).
The private key was saved in .ssh/id_rsa. This file is read-only and only for you. No one else must see the content of that file, as it is used to decrypt all correspondence encrypted with the public key.
The public key is save in .ssh/id_rsa.pub.
In this case, the content of file id_rsa.pub is
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEArkwv9X8eTVK4F7pMlSt45pWoiakFkZMw G9BjydOJPGH0RFNAy1QqIWBGWv7vS5K2tr+EEO+F8WL2Y/jK4ZkUoQgoi+n7DWQVOHsR ijcS3LvtO+50Np4yjXYWJKh29JL6GHcp8o7+YKEyVUMB2CSDOP99eF9g5Q0d+1U2WVdB WQM= cantin@sodium
It is one line in length.
Its content is then copied in file .ssh/authorized_keys of the system you wish to SSH to without being prompted for a password.
The example shown here generated keys on sodium by user cantin. If the public key generated, file .ssh/id_rsa.pub, was copied to your account, file .ssh/authorized_keys on nickel.sao.nrc.ca, then user cantin@sodium is allowed to SSH into your own account on nickel.sao.nrc.ca without the use of a password.
To summarize, a personal private/public key pair is generated using the ssh-keygen command. The public key is then copied onto a remote systems' .ssh/authorized_keys file. And you can now SSH to the remote systems's account without the use of a password.
Veja também
- http://debianclusters.org/index.php/Password-less_SSH_for_Users, funcionou seguindo estas informações