Comandos do Linux e Unix: Sistema; Processos; Sistema de Arquivos; Rede; SSH SCP; VPN com SSH; RSYNC; SUDO; Arquivos Encriptados; Partições Encriptadas; Certificados SSL; CVS; SVN; Comando Úteis; Instalar Software; Converter Mídia; Impressão; Banco de Dados; Quota de Disco; Shells; Scripting; Programação

SSH SCP

Veja outros truques 25 ssh cmdhttp://blog.urfix.com/25-ssh-commands-tricks/

Autenticação de chave pública

Conecte com um host sem senha utilizando autenticação com chave pública. A ideia é anexar sua chave pública ao arquivo authorized_keys2 no host remoto. Para esse exemplo vamos conectar o host-client ao host-server, a chave é gerada no cliente. Com o cygwin você pode ter que criar seu diretório home e o diretório .ssh com# mkdir -p /home/USER/.ssh

  • Utilize o ssh-keygen para gerar um par de chaves. ~/.ssh/id_dsa é a chave privada, ~/.ssh/id_dsa.pub é a chave pública.
  • Copie somente a chave pública ao servidor e anexe-a ao arquivo ~/.ssh/authorized_keys2 no home do seu servidor.
# ssh-keygen -t dsa -N ''
    # cat ~/.ssh/id_dsa.pub | ssh you@host-server "cat - >> ~/.ssh/authorized_keys2"

Utilizando o cliente Windows a partir do ssh.com

A versão não comercial do cliente ssh.com pode ser baixado do ftp principal: ftp.ssh.com/pub/ssh/. As chaves geradas pelo cliente ssh.com precisam ser convertidas pelo servidor OpenSSH. Isso pode ser feito com o comando ssh-keygen.

  • Crie um par de chaves com o cliente ssh.com: Configurações – Autenticação de usuário – Gera Nova….
  • Eu utilizo chave do tipo DSA; comprimento com chave de 2048.
  • Copie a chave pública gerada pelo cliente ssh.com para o servidor dentro do diretório ~/.ssh.
  • As chaves estão dentro de C:\Documents and Settings\%USERNAME%\Application Data\SSH\UserKeys.
  • Utilize o comando ssh-keygen no servidor para converter a chave:
    # cd ~/.ssh
        # ssh-keygen -i -f keyfilename.pub >> authorized_keys2
    

Nota: Utilizamos uam chave DSA, RSA também é possível. A chave não é protegida por uma senha.

Utilizar o putty para o Windows

Puttyhttp://www.chiark.greenend.org.uk/~sgtatham/putty/download.html é um cliente ssh simples e livre para Windows.

  • Crie um par de chaves com o programa puTTYgen.
  • Salve as chaves pública e privada (dentro into C:\Documents and Settings\%USERNAME%\.ssh por exemplo).
  • Copie a chave pública no servidor, dentro do diretório ~/.ssh:
    # scp .ssh/puttykey.pub root@192.168.51.254:.ssh/
  • Utilize o comando ssh-keygen no servidor para converter a chave para o OpenSSH:
    # cd ~/.ssh
        # ssh-keygen -i -f puttykey.pub >> authorized_keys2
    
  • Aponte o local a chave privada nas configurações do putty: Conexão – SSH – Auth

Verificar fingerprint

No primeiro login, ssh perguntará se o host desconhecido com a impressão digital (fingerprint) tem que ser armazenado nos hosts conhecidos. Para evitar um ataque man-in-the-middle, o administrador do servidor pode te enviar o fingerprint do servidor que é então comparado no primeiro login. Utilize ssh-keygen -l para obter a fingerprint (no servidor):

# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub      # Para chave RSA
    2048 61:33:be:9b:ae:6c:36:31:fd:83:98:b7:99:2d:9f:cd /etc/ssh/ssh_host_rsa_key.pub
    # ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub      # Para chave DSA (padrão)
    2048 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee /etc/ssh/ssh_host_dsa_key.pub

Agora o cliente que estiver conectando á esse servidor pode verificar que está conectando ao servidor correto:

# ssh linda
    A authenticity of host 'linda (192.168.16.54)' can't be established.
    DSA key fingerprint is 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee.
    Are you sure you want to continue connecting (yes/no)? yes

Transferência segura de arquivo

Some simple commands:

# scp file.txt host-two:/tmp
    # scp joe@host-two:/www/*.html /www/tmp
    # scp -r joe@host-two:/www /www/tmp

No Konqueror ou Midnight Commander é possível acessar um sistema de arquivo remoto com o endereço fish://user@gate. No entanto a implementação é muito lenta.
Além disso é possível montar uma pasta (um diretório) remoto com sshfs, um cliente sistema de arquivo (file system client) baseado no SCP. Veja fuse sshfshttp://fuse.sourceforge.net/sshfs.html.

ssh_exchange_identification: Connection closed by remote host

Com esse erro tente o seguinte no servidor:

echo 'SSHD: ALL' >> /etc/hosts.allow
    /etc/init.d/sshd restart

Tunelamento

Tunelamento SSH lhe permite direcionar ou reverter a porta na conexão SSH, assim garantindo o tráfego e acessar portas que caso contrario estariam bloqueadas. Isso só funciona com TCP. A nomenclatura geral para direcionamento e reverso é (veja também exemplo de ssh e NAT):

# ssh -L localport:desthost:destport user@gate  # desthost como visto a partir do gate
    # ssh -R destport:desthost:localport user@gate  # direciona a sua porta local para o destino
        # desthost:localport como visto a partir do cliente iniciando o túnel
    # ssh -X user@gate   # Forçar o X direcionar

Isso vai conectar ao gate e direcionar a porta local ao host desthost:destport. Note que desthost é o host de destino como visto pelo gate, então se a conexão é para o gate, então desthost é o localhost. Mais do que o direcionamento de uma porta é possível.

Direcionamento direto no gate

Digamos que queremos acessar CVS (porta 2401) e http (porta 80) que estão executando no gate. Isso é o exemplo mais simples, desthost é assim o localhost, e nós usamos a porta 8080 localmente ao invés da 80 então não precisamos ser o root. uma vez que a sessão ssh está aberta, ambos os serviços estão acessíveis nas portas local.

# ssh -L 2401:localhost:2401 -L 8080:localhost:80 user@gate

Direcionamento de Netbios e de área de trabalho remota para um segundo servidor

Diagmos que um servidor smb Windows está porta trás do gate e não está rodando ssh. Precisamos de acesso para o compartilhamento smb e também para a área de trabalho no servidor.

# ssh -L 139:smbserver:139 -L 3388:smbserver:3389 user@gate

O compartilhamento smb pode agora ser acessado com o \\127.0.0.1\, mas somente se o compartilhamento local for desabilitado, por que to compartilhamento local está escutando na porta 139.
É possível manter o compartilhamento local habilitado, para isso precisamos criar um novo dispositivo virtual com um novo endereço de IP para o túnel, o compartilhamento smb será conectado nesse endereço. Além disso o RPD local já está escutando na 3389, então nós escolhemos a 3388. Para esse exemplo vamos utilizar o IP virtual de 10.1.1.1.

  • Com o putty utilize a Source port=10.1.1.1:139. É possível criar dispositivos de loop e de túnel múltiplos. No Windows 2000, somente o putty funcionou para mim. No Windows Vista também direcionou para a porta 445 em adição à porta 139. Também no Vista o patch KB942624 impede a porta 445 direcionar, então eu tive que desinstalar esse path no Vista.
  • Com o cliente ssh.com, desabilite “Allow local connections only”. Já que ssh.com vinculará todos os endereços, somente um único compartilhamento pode ser conectado.

Agora crie a interface de loopback com o IP 10.1.1.1:

  • # System->Control Panel->Add Hardware # Yes, Hardware is already connected
    # Add a new hardware device (at bottom).
  • # Install the hardware that I manually select # Network adapters # Microsoft , Microsoft Loopback Adapter.
  • Configure o endereço de IP do dispositivo falso (fake) para o IP 10.1.1.1 máscara 255.255.255.0, sem gateway.
  • advanced->WINS, Enable LMHosts Lookup; Disable NetBIOS over TCP/IP.
  • # Abilite o Cliente para as redes Microsofts. # Desabilite Compartilhamento de Arquivo e Impressora para as Redes Microsoft.

Eu TIVE que reiniciar para que isso funcionasse. Agora conecte ao compartilhamento smb com \\10.1.1.1 e o remote desktop para 10.1.1.1:3388.

Debug

Se isso não estiver funcionando:

  • As portas estão direcionadas: netstat -an? Olhe para 0.0.0.0:139 ou 10.1.1.1:139
  • O telnet conecta em 10.1.1.1 139?
  • Você precisa do checkbox “Local ports accept connections from other hosts” (portas locais aceitam conexões a partir de outros hosts).
  • O “File and Printer Sharing for Microsoft Networks” está desabilitado na interface loopback?

Conecte dois clientes atrás do NAT

Suponhamos que dois clientes por trás de um gateway NAT e o cliente cliadmin tem que conectar ao cliente cliuser (o destino), ambos pode logar ao gate com o ssh e estão rodando linux com o sshd. Você não precisa acessar de qualquer lugar desde que as portas no gate estejam acima do 1024. Nós usamos 2022 no gate. Também desde que o gate seja utilizado localmente, a opção GatewayPorts não é necessária.
No cliente cliuser (a partir do destino para o gate):

# ssh -R 2022:localhost:22 user@gate            # direciona o cliente 22 para o gate:2022

No cliente cliadmin (a partir do host para o gate):

# ssh -L 3022:localhost:2022 admin@gate         # direciona o cliente 3022 para o gate:2022

Agora o admin pode conectar diretamente ao cliente cliuser com:

# ssh -p 3022 admin@localhost                   # local:3022 -> gate:2022 -> client:22

Conect ao VNC atrás do NAT

Suponhamos que um cliente Windows com VNC escutando na porta 5900 tem que ser acessado a partir do NAT.
No cliente cliwin para o gate:

# ssh -R 15900:localhost:5900 user@gate

No cliente cliadmin (a partir do host para o gate):

# ssh -L 5900:localhost:15900 admin@gate

Agora o admin pode conectar diretamente ao cliente VNC com:

# vncconnect -display :0 localhost

Cave (Dig) um túnel ssh multi-hop

Suponhamos que você não consiga alcançar um servidor diretamente com o ssh, mas somente via múltiplos hosts intermediários (por questões de roteamento por exemplo). Algumas vezes é necessário obter uma conexão direta cliente – servidor, por exemplo para compilar arquivos com o scp, ou direcionar outras portas como smb ou vnc.
Um jeito de fazer isso é acorrentar túneis (chain tunnels together) para direcionar uma porta para o servidor ao longo dos saltos. Essa porta “carrier” somente alcança seu destino final na ultima conexão para o servidor.
Suponhamos que queremos direcionar a porta ssh de um cliente para um servidor em dois saltos (hops). Um vez que o túnel é construído, é possível conectar ao servidor diretamente do cliente (e também adicionar um outra porta de direcionamento).

Cria túnel em um shell

cliente -> host1 -> host2 -> servidor e cave (dig) o túnel 5678

client># ssh -L5678:localhost:5678 host1        # 5678 é uma porta arbitraria para o túnel
    host_1># ssh -L5678:localhost:5678 host2        # acorrenta 5678 do host1 para o host2
    host_2># ssh -L5678:localhost:22 server         # termina o túnel na porta 22 no server

Use o túnel com um outro shell

cliente -> servidor utilizando o túnel 5678

# ssh -p 5678 localhost                         # conecta diretamente do cliente para o servidor
    # scp -P 5678 myfile localhost:/tmp/            # ou copie um arquivo diretamente utilizando o túnel
    # rsync -e 'ssh -p 5678' myfile localhost:/tmp/ # ou utilizando rsync em um arquivo diretamente ao servidor

Script de autoconectar e manter vivo (keep alive)

Eu utilizo variações do seguinte script para manter a máquina alcançável no túnel ssh reverso. A conexão é automaticamente reconstruída e fechada. Você pode adicionar múltiplos túneis -L ou -R em uma linha.

#!/bin/sh
    COMMAND="ssh -N -f -g -R 3022:localhost:22 colin@cb.vu"
    pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND
    exit 0
1 * * * * colin /home/colin/port_forward.sh     # entrada crontab (aqui de hora em hora)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *