openssh

SSH Tips and Tricks

August 31, 2014 - Linux

The Secure Shell (SSH) is a fantastic safe data exchange and communication system, and not only a remote login tool. It can be used for tunneling several protocols, including TCP itself, thus allowing information routing between socket, similar to a VPN. With a program like SSHFS it is even possible to mount a remote file system with SSH support.

The following tips show some SSH configurations going beyond its traditional usage.


Tip #1 – Basic SSH Configuration and Options

The most usual SSH usage is similar to telnet or rlogin remote terminal session like:

The -p option allows to chose a different port to reach the SSH server (sshd); using alternative ports is a common security technique to difficult attacks.

There are several use options for the SSH client program, which can be viewed with man ssh. Such an information is also available in man sites, just like man7.org.

SSH configuration files are /etc/ssh/ssh_config (client) and /etc/ssh/sshd_config (server). Each user can also choose his own configuration options by writing them into his ~/.ssh directory. You can check all available options with man ssh_config (for the client) and man sshd_config (for the server); the same information can be consulted on-line at man7.org for  ssh_config and for sshd_config.

Some configuration options for the SSH server are highly recommended to improve system’s security. They can be specified by changing the file  /etc/ssh/sshd_config:

PermitRootLogin=no Do not accept root user connections. The user can become root later by using sudo or su, but only after the safe connection had been stablished between client and server SSH programs. This can help protecting the super-user password.
Protocol=2 Remove support for the protocol One, allowing only protocol Two transactions. Once protocol One does have known security flaws, it can be a weak spot in system security.
Port=… You shall change the SSH server listening port to a number different from the default (22), thus hiding SSH access from unauthorized machines.
Cyphers=… You can select only the strongest cryptography algorithms for improving security. But remember that the more sophisticated cryptography, the slower the data transfer will become.

Just like the way SSH client substitutes unsafe programs like telnet or rlogin, there are a number of SSH applications allowing to make safe file transfers between computers, in exchange for unsafe applications like rcp (for scp) and ftp (for sftp),working just like its unsafe counterparts. You should block those services and work with SSH alone.


Tip #2 – Authenticating with Asymmetric Keys to raise Security

SSH can be configured to not start a session by matching user names and passwords, but by exchanging and verifying cryptographic asymmetric keys. Those keys are long bit sequences, hard to be manipulated by humans- and unlike user/password pairs, are not easily vulnerable to brute-force attacks or reverse hashing.

An asymmetric key is a pair of numbers composed by a long sequence of bits; one of them must be kept secret- that is your private key. The other one is public, and may be distributed freely- it is the public key. Although the public key is well known, it is safe to use it to cypher information: it can only be decoded by using the its private counterpart, which remains secret and is never exchanged during communication.

SSH permits authenticate users by using asymmetric keys; once confirmed the key authenticity between client and server, the connection is started with conventional cryptography (using a symmetrical key)- that is faster. This session symmetrical key is randomly generated during the connection procedure, protected then by the much stronger asymmetrical key cryptography.

The SSH server will hold your public keys, while your corresponding private keys are kept with yourself in the client machine(s). You may or not protect the private keys with a local passphrase, that you will be asked for at the moment of its creation. SSH asymmetric keys can be generated with the tool ssh-keygen.

After executing the ssh-keygen command above, two files are created at the home folder,  ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub; the first file contains the private key and the later its corresponding public key. The private key may be itself protected by a passphrase if you specified one at the moment of its creation; in such a case, this passphrase will be asked when SSH needs to read the key. It is usually safe not using a passphrase at all when the private key is in your own computer, protected by your login system.

Protect the local private key and copy the public key to the SSH server, using a pen-drive or using scp. In the SSH server, it must be appended to the authorized keys file, at the directory  ~/.ssh/authorized_keys.

After that, the authentication will be made with the keys you just created.

If you are really paranoid, you can make asymmetric key authentication the one and only authentication method supported by SSH, by disabling password authentication in the configuration file /etc/ssh/sshd_config:


Dica 3 – Tunelando X-Windows através do SSH

Se você possui um servidor X-Windows na máquina cliente (por exemplo, X-Quartz no MacOS ou X-Ming no Windows ou use o Linux!), é perfeitamente possível executar sessões gráficas em um terminal SSH, sem a necessidade de utilitários como o xterm e outros.

Basta realizar a conexão usando a opção -X.


Dica 4 – Roteando Portas

O SSH pode ser utilizado também para tornar seguras conexões realizadas em portas TCP utilizadas por outras aplicações. O programa funciona nesse caso como uma espécie de VPN.

A forma mais simples para criar um túnel de porta TCP é usando o programa cliente. Ele vai abrir um socket local na porta que você especificar, e todo o tráfego de dados através dessa porta será criptografado com as chaves da sessão aberta e enviado ao servidor SSH, onde será então decriptografado e encaminhado ao servidor e porta remotos, especificados no comando. Use a seguinte sintaxe:

[porta local] é um número de porta TCP que vai funcionar como a porta remota, de forma transparente;

[servidor remoto] é um endereço IP ou URL que vai ser utilizado pelo servidor SSH para fazer a conexão com os dados decriptografados. Ele pode ser localhost, se o programa que está sendo protegido está sendo executado na mesma máquina que o próprio servidor SSH;

[porta remota] é a porta de destino da aplicação que se quer proteger com o SSH.

O par [usuário]@[servidor] é o mesmo do comando SSH padrão para iniciar uma sessão SSH.

Exemplo:  Encapsulando conexões ao servidor MySQL

Neste exemplo, a porta 13306 da máquina local passa a se comportar como se fosse a porta 3306 da máquina onde o servidor MySQL está sendo executado, de forma transparente para as demais aplicações. Você pode inclusive conectar outras máquinas a ela usando o endereço IP da sua máquina local.

Preste atenção ao fato de que o endereço que se encontra no interior da opção -L é aquele visto pelo servidor SSH, não pela máquina local, onde o programa cliente está sendo executado. No caso deste exemplo, o IP 192.168.0.55 pode inclusive não ser nem sequer acessível à sua máquina local, por ser um endereço IP da uma rede privativa e a máquina cliente pode estar fora dela.

A porta 3306 do servidor MySQL pode ser então bloqueada para acesso no firewall da máquina ou limitada somente à máquina na qual o servidor SSH é executado. A partir de então, somente conexões seguras (através do SSH) poderão ser feitas ao servidor MySQL. Você pode ainda permitir somente o acesso à porta 3306 no interior da rede local, mas bloqueá-la no firewall da rede, permitindo apenas o acesso à porta do servidor SSH (normalmente 22). Geralmente é uma boa ideia permitir o acesso externo a essa porta e somente a ela.


Dica 5 – Montando um Sistema de Arquivos remoto

Existe um grande número de tipos diferentes de protocolos para compartilhamento de arquivos, e essa é justamente a principal vantagem para se usar o próprio SSH para essa tarefa. Além de ser um protocolo seguro, a maioria dos sistemas operacionais possuem implementações dele, o que torna o compartilhamento de arquivos baseado no SSH bastante universal.

Para montar um sistema de arquivos sobre o SSH, é necessário instalar o software SSHFS. Ele pode ser baixado no site oficial ou instalado a partir do gerenciador de pacotes do seu sistema operacional:

Uma vez instalado o SSHFS, basta montar os diretórios desejados:

a opção allow_other quase sempre será necessária, do contrário você apenas poderá acessar os arquivos como usuário root, o que normalmente não é o desejado.

Se você está usando autenticação com chaves (dica 2), é necessário fornecer essa informação ao montar o sistema de arquivos usando a opção -o IdentityFile=/caminho/para/a/chave, por exemplo ~/.ssh/id_rsa.

Após o uso, o ponto de montagem pode ser desmontado normalmente, usando o comando umout:

Você pode montar diretórios com o SSHFS automaticamente, alterando o arquivo /etc/fstab, incluindo uma linha no formato

Um excelente tutorial sobre como utilizar o SSHFS pode ser encontrado neste site.

› tags: Linux / Redes / Segurança / SSH /

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">