Usando Utilitários do Cliente OpenSSH

Execute tarefas comuns do cliente OpenSSH, como conexão com hosts, cópia de arquivos e execução de encaminhamento de agente, porta e X11.

Use os utilitários do cliente OpenSSH para estabelecer conexão com um sistema remoto, copiar arquivos entre sistemas, lembrar frases-senhas, acessar por meio de um bastion host, carregar aplicativos GUI e encaminhar porta.

Estabelecendo Conexão com Outro Sistema Usando o Comando SSH

Use o comando ssh para autenticar, executar comandos remotos e verificar chaves de host.

Por padrão, cada vez que você usar os utilitários OpenSSH para se conectar a um sistema remoto, deverá fornecer um nome de usuário e uma senha. Quando você se conecta a um servidor OpenSSH pela primeira vez, o cliente OpenSSH solicita que você confirme se está conectado ao sistema correto.

Use o comando ssh para efetuar login em um sistema remoto ou para executar um comando em um sistema remoto:

ssh [options] [user@]host [command]

No exemplo anterior, host é o nome do servidor OpenSSH remoto ao qual você deseja se conectar.

Por exemplo, para fazer log-in no host04 usando o mesmo nome de usuário que está sendo usado no sistema local, execute o seguinte comando:

ssh host04

Para estabelecer conexão como outro usuário, especifique o nome de usuário e o símbolo @ antes do nome do host remoto, por exemplo, execute:

ssh joe@host04

Para executar um comando no sistema remoto e retornar ao shell local, especifique o comando como um argumento:

ssh joe@host04 ls $HOME/.ssh

O comando ssh efetua log-in, executa o comando e fecha a conexão.

Exemplo de Conexão com um Sistema

Os exemplos a seguir mostram como você se conectaria a um host remoto, host04. Você precisaria confirmar a ação de comando antes de estabelecer a conexão.

ssh host04
O exemplo de saída a seguir mostra a saída esperada do comando anterior:
The authenticity of host 'host04 (192.0.2.104)'
can't be established.
ED25519 key fingerprint is SHA256:iunRrbwnhwqkUrahjaodhsngtzwtF+RFHEjiaUdYaP8I.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'host04,192.0.2.104' (ED25519) to the
list of known hosts.

Quando você digita yes para aceitar a conexão com o servidor, o cliente adiciona a chave de host pública do servidor ao arquivo $HOME/.ssh/known_hosts. Quando você se conecta ao servidor remoto, o cliente compara a chave adicionada a $HOME/.ssh/known_hosts com a que o servidor fornece. Se as chaves não corresponderem, você verá um aviso como o seguinte:


...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:fingerprint.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/user/.ssh/known_hosts:1
Host key for ipa has changed and you have requested strict checking.
Host key verification failed
...

A menos que a chave de host do servidor remoto tenha sido alterada por um motivo conhecido, como um upgrade do software SSH ou do servidor, evite se conectar a essa máquina até que você entre em contato com o administrador sobre a situação.

Para obter mais informações, consulte a página do manual ssh(1).

Definindo Opções de Configuração do Cliente SSH para um Host

Crie entradas específicas do host no $HOME/.ssh/config para conexões simplificadas.

É possível configurar entradas de Host no arquivo $HOME/.ssh/config em um sistema cliente. Muitas vezes, os nomes de usuário não se alinham em sistemas diferentes. Às vezes, você pode usar um par de chaves diferente do par de chaves usual para um sistema remoto específico. Para se conectar mais facilmente com as credenciais corretas, você pode adicionar uma entrada de host semelhante ao seguinte exemplo:

Host server1
  Hostname server1.example.com
  User remote_user
  IdentityFile $HOME/.ssh/id_sshkeyexample

Com a entrada de configuração fornecida, o usuário pode executar:

ssh server1

O cliente SSH se conecta ao servidor remoto server1.example.com com o nome de usuário remote_user e usa o arquivo de chave privada em $HOME/.ssh/id_sshkeyexample.

Essa entrada de configuração permite que você se conecte com as credenciais corretas sempre que quiser se conectar. Sem a entrada de configuração, você precisaria inserir o seguinte:

ssh -i $HOME/.ssh/id_sshkeyexample remote_user@server1.example.com 

Você pode usar o arquivo $HOME/.ssh/config para armazenar outras opções de configuração para qualquer sistema ao qual se conectar. Por exemplo, se você usar as opções ForwardAgent ou ProxyJump com frequência, considere adicionar entradas para cada host em que você as usa. Consulte a página do manual ssh_config(5) para obter mais informações.

Cópia de arquivos entre sistemas com os comandos SCP e SFTP

Transfira arquivos com segurança com o scp ou interativamente com o sftp.

Usando SCP

Observação

No Oracle Linux 9 e no Oracle Linux 10, o utilitário scp assume como padrão o SSH File Transfer Protocol. Para obter mais informações, consulte a seção Security no capítulo Deprecated Features em Oracle Linux 9: Release Notes for Oracle Linux 9 e a página manual scp(1).

Com o comando scp, é possível copiar arquivos ou diretórios entre os sistemas. scp estabelece uma conexão, copia os arquivos e, em seguida, fecha a conexão.

Os exemplos a seguir mostram como você pode usar o comando scp.

  • Fazendo upload de um arquivo local para um sistema remoto

    scp [options] local_file [user @]host[: remote_file]

    Os exemplos a seguir mostram como fazer upload de um arquivo usando scp:

    • Copie testfile para o diretório home no host04.

      scp testfile host04:
    • Copie testfile para o mesmo diretório, mas altere seu nome para new_testfile.

      scp testfile host04:new_testfile
  • Download de um arquivo de um sistema remoto para o sistema local

    scp [options] [user@]host[:remote_file] local_file
  • Copiando arquivos recursivamente

    A opção -r copia recursivamente o conteúdo dos diretórios.

    Por exemplo, para copiar o diretório remdir e seu conteúdo do diretório home no host04 remoto para o diretório home local, você digitaria:

    scp -r host04:/home/user/remdir $HOME

    Observe que a expansão do shell da variável $HOME pode resultar em caminhos de arquivo não intencionais, se usado com o comando scp para especificar um caminho em um host remoto. Sempre use o caminho completo para o arquivo remoto no comando scp.

Usando o SFTP

O comando sftp é uma alternativa segura para o comando ftp que é usado para transferir arquivos entre sistemas. Diferentemente do comando scp, o comando sftp fornece funcionalidade para você navegar no sistema de arquivos no servidor remoto antes de copiar qualquer arquivo.

Para abrir uma conexão FTP a um sistema remoto via SSH, use o seguinte comando:

sftp [options] [user@]host

Por exemplo, você abriria uma conexão FTP ao sistema, host04, da seguinte forma:

sftp host04
Connecting to host04...
guest@host04’s password: password
sftp>

Digite os comandos sftp no prompt sftp>.

No exemplo a seguir, o comando put é usado para fazer upload do arquivo newfile do sistema local para o sistema remoto. Em seguida, o comando ls é usado para listá-lo:

sftp> put newfile
Uploading newfile to /home/guest/newfile
foo                                           100% 1198     1.2KB/s   00:01    
sftp> ls newfile
newfile        

Digite help ou ? para exibir uma lista de comandos disponíveis. Digite bye, exit ou quit para fechar a conexão e sair da sessão interativa sftp.

Para obter mais informações, consulte as páginas do manual ssh(1) e sftp(1).

Usando o Agente de Chave SSH para Lembrar Frases Passadas

Carregue chaves privadas para o agente SSH para inserir frases-senhas apenas uma vez por sessão.

Use o Agente de Chave SSH para inserir as frases-senhas de qualquer chave SSH uma única vez durante a sessão de log-in. Dessa maneira, você evita a prática de segurança insatisfatória da criação de chaves SSH sem frases-senhas.

  1. Depois de fazer log-in, verifique se o agente foi iniciado:

    ps -ef | grep -i ssh-agent
    Se o agente não for iniciado, inicie-o executando o seguinte comando:
    eval $(ssh-agent -s)
  2. Execute o comando ssh-add para adicionar qualquer uma das chaves SSH ao agente. Por exemplo:

    ssh-add $HOME/.ssh/id_sshkey

    O comando solicita a frase-senha da chave. A frase-senha se aplica a toda a sessão de login. Se você usar a chave para se conectar a outro sistema, o prompt de uma frase-senha não será mais exibido.

    Observação

    A mensagem de erro Could not open a connection to your authentication agent indica que o agente pode não estar em execução.

  3. Repita o comando para cada tecla que deseja adicionar.

  4. Depois de adicionar as chaves ao agente, você pode abrir conexões SSH para qualquer sistema que tenha a chave pública pareada configurada no arquivo authorized_keys, sem ser solicitado a inserir uma frase-senha. Esse comportamento se aplica também a qualquer script executado como usuário.

Usando o Encaminhamento de Agente SSH para Acesso por Meio de um Bastion Host

Encaminhe o agente SSH por meio de jump hosts sem copiar chaves privadas para sistemas remotos.

Cuidado

Ative o encaminhamento do agente com cautela. Os usuários com privilégios escalados no host remoto podem acessar o agente por meio da sessão SSH encaminhada. Embora os usuários mal-intencionados não possam acessar as chaves diretamente, eles podem sequestrar a sessão do agente e usar as chaves do agente para se conectar a outros sistemas. Se você estiver se conectando a um sistema que pode ter usuários não confiáveis, evite usar o encaminhamento de agentes.

O Encaminhamento de Agente SSH é uma ferramenta poderosa que pode ajudá-lo a manter as chaves privadas centralizadas e seguras. Evite copiar chaves privadas para outros sistemas, tanto quanto possível. O Encaminhamento de Agente SSH permite que você se conecte a um sistema remoto e, em seguida, use o cliente SSH nesse sistema para se conectar a outro sistema usando a mesma autenticação baseada em chave, mas sem a necessidade de copiar a chave privada para o host ao qual você se conectou pela primeira vez.

Configuração do Servidor

Altere o arquivo /etc/ssh/sshd_config para configurar o encaminhamento do Agente SSH. No servidor, verifique o parâmetro AllowAgentForwarding, que ativa o encaminhamento do agente SSH e é ativado por padrão.

Configuração do Cliente

Para ativar esta funcionalidade, você deve usar a opção ForwardAgent ao estabelecer uma conexão com um sistema intermediário na cadeia de hosts à qual você se conecta. Você também deve ter a chave privada já carregada no Agente SSH no host do cliente principal. Consulte Usando o Agente de Chave SSH para Lembrar Frases de Identificação.

Para usar o Encaminhamento de Agente SSH:

  1. Verifique se o Agente SSH está em execução e se a chave SSH está carregada. Execute o seguinte comando no sistema cliente para ver quais chaves o agente carregou:
    ssh-add -L
  2. Conecte-se a um host usando a opção ForwardAgent=yes:
    ssh -o ForwardAgent=yes server1.example.com
  3. Use o cliente SSH no host remoto para estabelecer conexão com outro servidor que tenha a chave pública configurada em seu authorized_keys:
    ssh server2.example.com

Considere adicionar a opção ForwardAgent a uma entrada de configuração de Host no arquivo $HOME/.ssh/config se você usar essa opção com frequência para um servidor específico. Consulte Definindo Opções de Configuração do Cliente SSH para um Host para obter mais informações.

Utilizando ProxyJump para Acesso por Meio de um Jump Host

Roteie conexões SSH por meio de hosts bastion com a opção ProxyJump.

O encaminhamento do Agente SSH permite que os clientes se conectem de um servidor para o outro usando a autenticação baseada em chaves sem copiar a chave privada para cada servidor da cadeia. Esta abordagem não é considerada uma boa prática de segurança, porque os usuários com os privilégios apropriados no servidor remoto podem sequestrar o agente e usá-lo para se conectar a outros sistemas sem exigir autenticação.

Use a opção ProxyJump no cliente OpenSSH para configurar o acesso a servidores remotos usando bastion e jump hosts. A funcionalidade ProxyJump funciona da mesma forma que um túnel SSH ou uma porta para frente, na medida em que proxies todo o tráfego direto pelo jump host. Ao contrário do encaminhamento de porta, ProxyJump não requer configuração no lado do servidor, portanto, apenas o acesso SSH ao jump host é necessário.

Configurando ProxyJump

Defina os hosts ProxyJump em $HOME/.ssh/config ou na linha de comando.

Os hosts Jump são configurados no arquivo $HOME/.ssh/config. No exemplo a seguir, o host jump em jumphost.example.com está conectado à rede interna e salta para o host em internal.example.com:

# File $HOME/.ssh/config with example of ProxyJump configuration

Host myjumphost
  HostName jumphost.example.com 

Host myremotehost
  HostName internal.example.com 
  ProxyJump myjumphost

Para estabelecer conexão com o host remoto por meio do jump server usando o arquivo $HOME/.ssh/config anterior, execute o seguinte comando:

ssh myremotehost

Se você estiver se conectando a hosts remotos espontaneamente e não tiver configurações de ProxyJump configuradas para eles no arquivo $HOME/.ssh/config, poderá especificar os detalhes necessários do salto e do host remoto usando as seguintes opções de comando:

  • Usando ssh -J

    O flag -J é usado para especificar informações de ProxyJump na linha de comando. Por exemplo, você pode executar:

    ssh -J jumphost.example.com internal.example.com
  • Usando ssh -o

    O flag -o fornece um método mais geral (não limitado à configuração do ProxyJump) que pode ser usado para especificar opções para o comando ssh no formato que seria usado no arquivo $HOME/.ssh/config. Por exemplo, você pode executar:

    ssh -o 'ProxyJump=jumphost.example.com' internal.example.com

Para obter mais informações, consulte Definindo Opções de Configuração do Cliente SSH para um Host e as páginas de manual ssh(1) e ssh_config(5).

Usando o Encaminhamento X11 para Carregar Aplicativos Gráficos Remotos

Ative o encaminhamento X11 para exibir aplicativos GUI remotos em uma área de trabalho local.

O encaminhamento X11 permite que um usuário inicie aplicativos gráficos instalados em um sistema Linux remoto para que sejam exibidos no ambiente de desktop do sistema local. O sistema remoto não precisa ter um servidor X11 ou um ambiente de desktop gráfico em execução, mas o sistema local deve ter um serviço compatível com X11 em execução.

Configuração do Servidor

  1. Altere o arquivo /etc/ssh/sshd_config para ativar o encaminhamento X11. No servidor, verifique os seguintes parâmetros:

    X11Encaminhamento

    Permite encaminhamento X11. Quando omitido, o padrão é no. Para ativar o encaminhamento X11, adicione uma entrada que defina o valor desse parâmetro como yes.

  2. Se você editar o arquivo de configuração, reinicie o serviço para que a alteração entre em vigor:

    sudo systemctl restart sshd
  3. O sistema remoto também deve dar suporte à execução de aplicativos X11 e autenticar sessões X11. O pacote xorg-x11-xauth é necessário para essa finalidade.

    dnf install xorg-x11-xauth
    Se você nunca tiver executado um aplicativo gráfico no servidor remoto, na primeira vez que se conectar ao servidor remoto usando o encaminhamento X11, uma mensagem de aviso será exibida:
    /usr/bin/xauth: file /home/user/.Xauthority does not exist

    Você pode ignorar esse aviso, pois o arquivo .Xauthority é criado automaticamente.

Configuração do Cliente

  1. Use a opção -Y com o cliente SSH quando se conectar a um servidor remoto:

    ssh -Y user@server1.example.com
  2. Execute um aplicativo gráfico pela conexão SSH digitando o comando diretamente no terminal SSH. Por exemplo, se gedit estiver instalado no sistema remoto, você poderá executar o seguinte comando:

    gedit &
    Dica

    Use o operador &, conforme mostrado no exemplo anterior, para iniciar o processo em segundo plano para que o terminal permaneça disponível para você.

Configurando o Encaminhamento de Porta por SSH

Crie túneis SSH para encaminhamento de porta local, dinâmica ou reversa.

O encaminhamento de porta SSH cria um túnel SSH criptografado entre um cliente e um sistema de servidor.

Três tipos de encaminhamento de porta SSH estão disponíveis:

Por que usar o encaminhamento de porta?

O encaminhamento de portas permite que servidores remotos acessem dispositivos dentro de uma rede local privada (LAN) e vice-versa.

Você pode usar o encaminhamento de porta para acessar um serviço que não esteja exposto à interface de rede pública. Você pode configurar um encaminhamento de porta local para acessar um serviço (como um banco de dados) em um servidor remoto. O banco de dados no servidor não está exposto à interface de rede pública, mas você pode criar um túnel de uma máquina local para a porta do servidor de banco de dados interno. Em seguida, você pode estabelecer conexão com o localhost e todo o tráfego será encaminhado pelo túnel SSH para o banco de dados remoto.

Você pode usar o encaminhamento de porta reversa para conceder a alguém fora da rede local acesso a um serviço interno. Por exemplo, você pode querer mostrar a um colega desenvolvedor um aplicativo web que você desenvolveu na máquina local. Como a máquina não tem um IP público, o outro desenvolvedor não pode acessar o aplicativo pela internet. No entanto, se você tiver acesso a um servidor SSH remoto, poderá configurar o encaminhamento de porta reversa para fornecer ao desenvolvedor acesso.

Configuração do Servidor

Edite o arquivo /etc/ssh/sshd_config para configurar o encaminhamento de porta SSH. No servidor, verifique no mínimo os seguintes parâmetros:

  • AllowTCPForwarding

    Permite encaminhamento de porta TCP. Quando omitido, o padrão é yes, que ativa o encaminhamento de porta TCP única e o proxy SOCKS

  • AllowStreamLocalForwarding

    Permite o encaminhamento de soquetes de domínio UNIX. Quando omitido, o padrão é yes.

Encaminhamento de Porta Local

Para criar um túnel de avanço TCP direto, use a opção ssh -L:

ssh -L [bind_address:]port:destination:destination_port [user@]remote_ssh_server
  • bind_address é opcional e designa uma interface local para fazer listening de conexões. Se for omitido, ssh só se vincula nas interfaces de loopback. Para vincular em todas as interfaces, você pode usar 0.0.0.0 ou ::.
  • port - O número da porta local. Você pode usar qualquer número de porta maior que 1024.
  • destination - O IP ou o nome do host da máquina de destino. Se o destino estiver no próprio servidor remoto, você poderá usar o localhost.
  • destination_port - Porta na máquina de destino.
  • [user@]remote_ssh_server - O usuário SSH remoto e o endereço IP do servidor.

Por exemplo, você pode executar:

ssh -L 8080:localhost:8888 user@192.168.1.20

Esse comando abriria uma conexão SSH com o servidor remoto em 192.168.1.20 e abriria um túnel para a porta localhost 8888.

Encaminhamento de Porta Dinâmica

Use o encaminhamento de porta dinâmica para que o cliente SSH faça listening em uma porta de binding especificada e atue como um servidor proxy SOCKS. Não é necessário especificar um host de destino, pois todas as conexões de entrada na porta especificada são encaminhadas por meio do túnel para uma porta dinâmica na máquina de destino.

Para criar uma porta dinâmica para frente, use a opção ssh -D.

ssh -D [bind_address:]port [user@]remote_ssh_server

Reverter Encaminhamento de Porta

Um túnel reverso encaminha qualquer conexão recebida no servidor SSH remoto para a rede do cliente local.

Para criar uma porta reversa para frente, use a opção ssh -R.

Para encaminhamento reverso de porta local:

ssh -R [bind_address:]port:destination:destination_port [user@]remote_ssh_server

Para encaminhamento reverso de porta dinâmica:

ssh -R [bind_address:]port [user@]remote_ssh_server