Acesso Remoto

Introdução

Normalmente uma máquina remota (na internet pública) não pode iniciar comunicações com uma máquina interna (na intranet departamental). Isso protege contra ataques diretos - diariamente nosso firewall bloqueia ~50.000 sondagens procurando buracos ou fraquezas para atacar. No entanto, às vezes acesso remoto é útil ou até necessário, particularmente durante uma viagem, para rodar um programa como Fluent, por exemplo, ou para pegar arquivos importantes.

SSH/SFTP                                           SSH/SFTP
   |                                                  |
   |    +-SSH-+              +-SSH-+                  |
   |    |     |              |     |                  |
   |    :p    |             :22    |                 :22
   |    |     |              |     |                  |
   +----+     +---internet---+     +---
intranet-------+ 

 <---remota--->              <acesso>              <interna> 

        <-------TÚNEL SSH---------->

 
  <-------------------------------------------------->
   <---------------CONEXÕES SSH/SFTP------------------>                                
   <-------------------------------------------------->

Acesso remoto envolve:
  1. A abertura de um túnel ssh seguro entre a máquina remota e acesso.fisica.ufc.br.
    Criptografia assimétrica, em vez de uma senha, é usada para mais segurança durante a abertura. Duas chaves são geradas na máquina remota: a chave secreta é protegida por uma passphrase local; a chave pública é registrada em acesso.fisica.ufc.br, junto com o endereço da máquina externa e o nome da máquina interna que vai ser acessada.
  2. A criação de conexões através do túnel entre a máquina remota e a máquina interna.
    As conexões ssh abrem um shell na máquina interna para rodar programas: se um programa precisar de uma interface gráfica (janelas, mouse etc.), esta pode ser transferida para a máquina remota. As conexões sftp transferem arquivos entre as máquinas.
A máquina remota pode rodar Linux (ou outras sistemas da família Unix) ou Windows. A máquina interna precisa ser um servidor de ssh: normalmente Linux é usado.



Instruções para Linux, Solaris, FreeBSD...

Básicas

  1. Use o comando
    ssh-keygen -t rsa
    para gerar um par de chaves:
  2. Mande um email para Ramos ou Tony com:
  3. Depois de receber uma conta (a) na máquina acesso, teste a conectividade com o comando local:
    ssh a@acesso.fisica.ufc.br
    [devia pedir sua passphrase e mostrar um cabeçalho do departamento de física].
    Feche o teste com Ctrl+C.
  4. Para abrir um túnel levando conexões da porta p (por exemplo, 4000) na máquina remota para
    a porta 22 (ssh/sftp) na máquina interna i, use o comando:
    ssh -L p:i:22 a@acesso.fisica.ufc.br
    [o comando "netstat -na" mostra as portas usadas]
    A janela (shell) usada para este comando agora só serve para manter o túnel aberto.
  5. Para  criar conexões através do túnel para sua conta (b) na máquina interna, abra outras janelas (shells) e use os comandos:
    [obs: o sintaxe para "porta p" varia entre comandos]

Interfaces Gráficas

Depois de abrir o túnel (item 4 acima), as seguintes interfaces gráficas (em vez de textuais) podem ser interessantes.

gftp

Este programa oferece uma interface gráfica local que simplifica a transferência de arquivos por sftp.
  1. Configure o menu FTP|Options|SSH assim:
  2. Connecte através do túnel assim:

X11 Forwarding

Para rodar um programa gráfico na máquina interna, é necessário transferir sua interface gráfica (janelas, mouse, teclado) para a máquina remota.

X11 Forwarding é um modo embutido em ssh de transferir uma interface gráfica entre máquinas. Transfere janelas separadas.
  1. Desde que a máquina interna permita ("X11 Forwarding yes" no arquivo /etc/ssh/sshd_config), use o comando local:
    ssh -XC -p p b@127.0.0.1    # para abrir um shell com X11 Forwarding
  2. Dentro do shell, use comandos como:

VNC

VNC (Virtual Network Computing) é outro modo de transferir uma interface gráfica entre máquinas. Transfere a tela inteira.

Para programas visualmente pesados, VNC é mais lento do que X11 Forwarding. Por outro lado, a transferência da tela inteira e a preservação da sessão entre acessos podem ser úteis em certos casos.
  1. Desde que a máquina interna tenha vncserver instalado, use o comando local:
    ssh -p p b@127.0.0.1 vncserver -localhost -geometry 1024x768 -depth 16
    para ativar o servidor de VNC.
    [Se o novo X desktop for i:n, o servidor está usando a porta q=5900+n]
  2. Para rodar o cliente de VNC na máquina interna (transferindo a interface gráfica por X11 Forwarding), use o comando local:
    ssh -XC -p p b@127.0.0.1 xvncviewer 127.0.0.1:n
  3. Para rodar o cliente de VNC na máquina remota (transferindo o protocolo VNC por um túnel), use os comandos locais:
  4. Para desativar o servidor de VNC na máquina interna, use o comando local:
    ssh -p p b@127.0.0.1 vncserver -kill :n

Exemplo

O seguinte script é um exemplo de como automatizar acesso remoto ao departamento.
  1. Abra um novo arquivo xxxx (eg "acesso") em seu editor predileto.
  2. Copie e cole o script no arquivo.
  3. Atualize os parâmetros A, I, B e talvez P, K.
  4. Salve o arquivo.
  5. Use o comando "chmod 700 xxxx" para abilitar execução.
  6. Para rodar direto, use os comandos:
  7. Para automatizar ainda mais, coloque os comandos (eg "$HOME/xxxx open") no menu do seu window manager (kmenuedit para kde).
#!/bin/sh
A=        # Userid (account name) on acesso.fisica.ufc.br (eg tony)
I=        # Internal host in intranet.fisica.ufc.br (eg arara)
B=        # Userid (account name) on $I (eg tony)
P=4000    # Change this if 4000 is occupied (netstat -na to see ports in use)
K=        # Path to keyfile (only if different from default, ~/.ssh/id_rsa)
if [[ "$A" == '' || "$I" == '' || "$B" == '' || "$P" == '' ]]; then
    echo "$0 has not been edited correctly" >&2
    exit 1
fi
case "$1" in
  open)
        if [ "$K" != '' ]; then
            x="-i $K"
        fi
        xterm -T fisica.ufc.br -geometry 63x1 -bg black -fg green -e \
            ssh $x -L $P:$I:22  $A@acesso.fisica.ufc.br &
        ;;
  ssh)
        konsole --caption $I -e \
            ssh -XC -p $P  $B@127.0.0.1 &
        ;;
  sftp)
        konsole --caption $I -e \
            sftp -C -oPort=$P  $B@127.0.0.1 &
        ;;
  gftp)
        gftp ssh2://$B@127.0.0.1:$P &
        ;;
  gtk-menu)
        ssh -XCf -p $P  $B@127.0.0.1 gtk-menu
        ;;
  *)
        echo "Usage: $0 {open|ssh|sftp|gftp|gtk-menu}" >&2
        exit 1
        ;;
esac


Instruções para Windows

PuTTY implementa ssh para Windows. Pegue putty.zip que tem os programas PuTTYgen, PSFTP e PuTTY mesmo, e descompacte no diretório \Program Files\Putty.

Básicas

  1. Use o programa PuTTYgen para gerar um par de chaves tipo RSA:
  2. Detalhes:
    1. Rode puttygen.
    2. Clique "SSH2 RSA".
    3. Clique  "Generate".
    4. Mexa com o mouse durante o cálculo (para gerar entropia).
    5. Coloque sua passphrase em "Key passphrase" e "Confirm passphrase".
    6. Clique "Save Private key" e escolhe o nome "keyfile" no diretório \Program Files\Putty.
    7. Abra um programa de email ou webmail.
    8. Começa uma mensagem para Ramos ou Tony, colocando:
      • o endereço IP da máquina remota local;
      • o nome da máquina interna que pretende acessar.
    9. Na caixa "Public key for pasting..." de puttygen:
      • clique (botão direito) "Selecionar Tudo";
      • clique (botão direito) "Copiar" ou tecle Ctrl+C.
    10. No programa de email ou webmail:
      • clique (botão direito) "Colar" ou tecle Ctrl+V;
      • mande o email.
  3. Depois de receber uma conta (a) na máquina acesso, teste conectividade com o comando:
    putty -ssh -i keyfile.PPK -l a acesso.fisica.ufc.br
    [devia pedir sua passphrase e mostrar um cabecalho do departamento de física].
    Feche o teste com Ctrl+C.
  4. Para abrir um túnel levando conexões de porta p (por exemplo, 4000) na máquina remota para
    porta 22 (ssh/scp/sftp) na máquina interna i, use o comando:
    putty -ssh -i keyfile.PPK -L p:i:22 -l a acesso.fisica.ufc.br
    [o comando "netstat -na" mostra as portas usadas]
    A janela (shell) usada para este comando agora só serve para manter o túnel aberto.
  5. Para  criar conexões através do túnel para sua conta (b) na máquina interna, use os comandos:

Interface Gráfica

PuTTY

PuTTY oferece uma interface gráfica.

Para abrir um túnel (como o passo 3 acima) na interface gráfica:
  1. Rode putty.
  2. Clique "Category: Connection".
  3. Como "Auto-login username" coloque a conta (a) que você recebeu na máquina acesso.
  4. Clique "Category: Connection-SSH-Auth".
  5. Como "Private key file for authentication:" coloque "C:\Program Files\Putty\keyfile.PPK".
  6. Clique "Category: Connection-SSH-Tunnels".
  7. Como "Source  port" coloque "4000".
  8. Como "Destination" coloque "i:22" onde i é a máquina interna que vai acessar.
  9. Clique "Add".
  10. Clique "Category: Session"
  11. Como "Host Name (or IP address)" coloque "acesso.fisica.ufc.br".
  12. Como "Protocol" clique "SSH".
  13. Como "Saved Sessions" coloque "acesso".
  14. Clique "Save" para guardar a sessão.
  15. Clique "Open" para abrir o túnel.
  16. Coloque sua passphrase quando for pedida.
  17. Depois de aparecer o cabeçalho do departamento, pode minimizar a janela.
  18. Para fechar o túnel, feche a janela.
Para criar uma conexão (abrindo um shell) através do túnel (como o passo 4 acima) na interface gráfica:
  1. Rode putty.
  2. Clique "Category: Connection".
  3. Como "Auto-login username" coloque sua conta (b) na máquina interna i.
  4. Clique "Category: Connection-SSH".
  5. Clique "Enable compression"
  6. Clique "Category: Session".
  7. Como "Host Name (or IP address)" coloque "localhost".
  8. Como "Port" coloque "4000".
  9. Como "Saved Sessions" coloque "connection".
  10. Clique "Save" para guardar a sessão.
  11. Clique "Open" para conectar.

WinSCP

WinSCP oferece uma interface gráfica local que simplifica a transferência de arquivos por sftp.

Para criar uma conexão (para transferir arquivos) através do túnel (como o passo 4 acima):
  1. Rode WinSCP.
  2. Clique "SSH" no painel à esquerda.
  3. Clique "Enable Compression".
  4. Clique "2 only".
  5. Clique "Session" no painel à esquerda.
  6. Como "Host name" coloque "localhost".
  7. Como "Port number" coloque "4000".
  8. Como "User  name" coloque sua conta (b) na máquina interna i.
  9. Clique "Protocol SFTP".
  10. Clique "Save" para guardar a sessão.
  11. Clique "Login" para conectar.

VNC

Para rodar um programa gráfico na máquina interna, é necessário transferir sua interface gráfica (janelas, mouse, teclado) para a máquina remota. VNC (Virtual Network Computing) é um modo de transferir uma interface gráfica entre máquinas. Para programas visualmente pesados, VNC precisa de uma conexão de alta velocidade.

  1. Desde que a máquina interna tenha vncserver instalado, abra um shell nela para usar o comando:
    vncserver -localhost -geometry 1024x768 -depth 16
    para ativar o servidor de VNC.
    [Se o novo X desktop for i:n, o servidor está usando a porta q=5900+n]
  2. Na máquina remota, use o comando local:
  3. Na máquina remota, rode o vnc viewer.
  4. Como "VNC server" coloque "localhost:n"
  5. Para desativar o servidor de VNC na máquina interna, abra um shell nela para usar o comando:
    vncserver -kill :n