====== SSH OpenSSH ======
O OpenSSH é uma implementação livre do protocolo **SSH (Secure Shell)** que nos possibilita acessar máquinas remotas com segurança para realizar tarefas administrativas em sistemas Linux através de comunicação criptografada (Criptografia assimétrica - Usa par de chaves - com algorítimos DSA/RSA). Ele trabalha com conceito de cliente servidor e fornece alguns comandos extras como //scp// e //sftp//, os quais também usam criptografia.
Para usar o SSH é necessário ter o pacote do servidor e do cliente instalados.
# rpm -qa | grep ssh
openssh-clients-6.4p1-8.el7.x86_64
openssh-server-6.4p1-8.el7.x86_64
libssh2-1.4.3-8.el7.x86_64
openssh-6.4p1-8.el7.x86_64
# dpkg -l | grep ssh
ii openssh-blacklist 0.4.1+nmu1 all list of default blacklisted OpenSSH RSA and DSA keys
ii openssh-blacklist-extra 0.4.1+nmu1 all list of non-default blacklisted OpenSSH RSA and DSA keys
ii openssh-client 1:6.0p1-4+deb7u2 i386 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:6.0p1-4+deb7u2 i386 secure shell (SSH) server, for secure access from remote machines
ii ssh 1:6.0p1-4+deb7u2 all secure shell client and server (metapackage)
Em geral o SSH utiliza a porta 22/tcp porém este padrão pode ser alterado através de seu arquivo de configuração.
Se o serviço está ativo, essa porta é liberada para aceitar conexões SSH no servidor.
# ss -nltp | grep 22
LISTEN 0 128 :::22 :::* users:(("sshd",2146,4))
LISTEN 0 128 *:22 *:* users:(("sshd",2146,3))
No primeiro acesso, será solicitado que você aceite a identificação do servidor que será armazenada no arquivo
~/.ssh/known_hosts.
# ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is 41:88:e0:4b:7a:40:39:e6:5a:a4:23:33:20:4d:af:33.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
O arquivo de configuração known_hosts fica localizado dentro do diretório oculto .ssh que fica dentro da home de usuário.
# cat /root/.ssh/known_hosts
localhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIddOFSIS2Vuok2i79YCNgsz0jRdgVKu/ZMaOjHptsf00SQiPEmNj6baHjZGGqtx4oC5q7SYKj4CXg061ruEwhE=
Este arquivo possui a função de armazenar os nomes de hosts e as chaves dos equipamentos acessados via SSH, por padrão essas entradas são armazenadas em hashes, sendo que caso informações como a chave ou o endereço IP mudem o SSH emitirá um aviso durante a tentativa de conexão.
Caso uma entrada tenha sido alterada propositalmente é possível removê-la do arquivo know_hosts através do comando //ssh-keygen -R// seguido do nome (ou endereço) do host que deverá ser removido.
==== Acesso sem senha ====
A criação de chaves assimétricas consiste na geração de dois arquivos que só terão funcionalidade se os dois trabalharem em conjunto. Ou seja, quando criamos um par de chaves será criada uma chave pública e uma chave privada. A chave privada é sua e absolutamente ninguém deve ter acesso a ela; a sua chave pública você coloca no
servidor remoto.
Quando você tentar estabelecer uma conexão ela só será possível se a chave privada se encaixar na chave pública. Com esse sistema, existe apenas uma única chave privada que se encaixa em uma única chave pública.
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
5c:92:89:fa:3a:dd:b4:5f:9e:e1:07:f3:c5:08:73:14 root@security
The key's randomart image is:
+--[ RSA 2048]----+
| E. |
| . o . |
| . + . . |
| . . o o . |
| . S + o |
| . . o . o|
| ..o . o+ . |
| ... o + oo |
| .. .. +. |
+-----------------+
O comando acima gera os arquivos //.ssh/id_rsa// e //.ssh/id_rsa.pub// dentro do seu diretório //home//, que são, respectivamente, sua chave privada e sua chave pública. O //.ssh/id_rsa// é um arquivo secreto, que deve usar obrigatoriamente o modo de acesso **600**, para evitar que outros usuários da máquina possam lê-lo.
OBS: Muitos servidores recusam a conexão caso os arquivos estejam com as permissões abertas.
Como só há um par que se completa, apenas quem possuir a chave privada poderá estabelecer uma conexão utilizando a respectiva chave pública.
# ssh-copy-id 192.168.200.20
O que o ssh-copy-id faz nada mais é do que copiar o conteúdo do arquivo //.ssh/id_rsa.pub//, dentro do seu diretório home, para o arquivo //.ssh/authorized_keys// dentro do diretório //home// do servidor remoto.