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:
- 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.
- 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
- Use o comando
- ssh-keygen -t rsa
para gerar um par de chaves:
- uma pública (no arquivo ~/.ssh/id_rsa.pub)
- uma secreta (no arquivo ~/.ssh/id_rsa), que deve ser protegida
por uma passphrase
(uma frase que você não vai esquecer e que um hacker não
vai adivinhar).
- Mande um email para Ramos ou Tony com:
- sua chave pública (id_rsa.pub);
- o endereço IP da máquina remota local;
- o nome da máquina interna que pretende acessar.
- 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.
- 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.
- 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:
- ssh -C -p p b@127.0.0.1
# para abrir um shell
- sftp -C -oPort=p b@127.0.0.1
# para transferir arquivos
[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.
- Configure o menu FTP|Options|SSH assim:
- SSH Extra Params: -C
- SSH2 sftp-server path: /usr/lib
- Use SSH2 SFTP subsys
- Connecte através do túnel assim:
- Host: 127.0.0.1
- Port: p (de item 4 acima)
- User: b (conta na máquina interna)
- SSH2 (em vez de FTP)
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.
- 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
- Dentro do shell, use comandos como:
- echo $DISPLAY
# para testar (~ localhost:10.0)
- xclock &
# para rodar programas gráficos como
xclock
- gtk-menu &
# para mostrar um menu gráfico (debian menu)
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.
- 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]
- 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
- Para rodar o cliente de VNC na máquina remota (transferindo
o protocolo VNC por um túnel), use os comandos locais:
- ssh -CTN -L q:127.0.0.1:q
-p p b@127.0.0.1 # para
criar o túnel de ssh
- xvncviewer 127.0.0.1:n
# para
rodar o cliente
- 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.
- Abra um novo arquivo xxxx (eg "acesso") em seu editor predileto.
- Copie e cole o script no arquivo.
- Atualize os parâmetros A, I, B e talvez P, K.
- Salve o arquivo.
- Use o comando "chmod 700 xxxx" para abilitar execução.
- Para rodar direto, use os comandos:
- ./xxxx open # para criar
o tunel (desaparece ao fechar a janela)
- ./xxxx ssh # para abrir
um shell (ssh num konsole kde)
- ./xxxx sftp # para transferir
arquivos (sftp num konsole kde)
- ./xxxx gftp # para transferir
arquivos (gftp numa janela)
- ./xxxx gtk-menu # para mostra um menu
(numa janela)
- 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
- Use o programa PuTTYgen
para gerar um par de chaves tipo RSA:
- uma pública
- uma secreta, que deve ser protegida por uma passphrase
(uma frase que você não vai esquecer e que um hacker não
vai adivinhar).
- Detalhes:
- Rode puttygen.
- Clique "SSH2 RSA".
- Clique "Generate".
- Mexa com o mouse durante o cálculo (para gerar entropia).
- Coloque sua passphrase em "Key passphrase" e "Confirm passphrase".
- Clique "Save Private key" e escolhe o nome "keyfile" no diretório
\Program Files\Putty.
- Abra um programa de email ou webmail.
- 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.
- Na caixa "Public key for pasting..." de puttygen:
- clique (botão direito) "Selecionar Tudo";
- clique (botão direito) "Copiar" ou tecle Ctrl+C.
- No programa de email ou webmail:
- clique (botão direito) "Colar" ou tecle Ctrl+V;
- mande o email.
- 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.
- 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.
- Para criar conexões através do túnel
para sua conta (b) na máquina interna, use os comandos:
- putty -ssh -C -P p -l b
localhost # para abrir um shell
- psftp -C -P p -l b localhost
# para transferir arquivos
Interface Gráfica
PuTTY
PuTTY oferece uma interface gráfica.
Para abrir um túnel (como o passo 3 acima) na interface gráfica:
- Rode putty.
- Clique "Category: Connection".
- Como "Auto-login username" coloque a conta (a) que você
recebeu na máquina acesso.
- Clique "Category: Connection-SSH-Auth".
- Como "Private key file for authentication:" coloque "C:\Program
Files\Putty\keyfile.PPK".
- Clique "Category: Connection-SSH-Tunnels".
- Como "Source port" coloque "4000".
- Como "Destination" coloque "i:22" onde
i é a máquina interna que vai acessar.
- Clique "Add".
- Clique "Category: Session"
- Como "Host Name (or IP address)" coloque "acesso.fisica.ufc.br".
- Como "Protocol" clique "SSH".
- Como "Saved Sessions" coloque "acesso".
- Clique "Save" para guardar a sessão.
- Clique "Open" para abrir o túnel.
- Coloque sua passphrase quando for pedida.
- Depois de aparecer o cabeçalho do departamento, pode minimizar
a janela.
- 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:
- Rode putty.
- Clique "Category: Connection".
- Como "Auto-login username" coloque sua conta (b) na máquina
interna i.
- Clique "Category: Connection-SSH".
- Clique "Enable compression"
- Clique "Category: Session".
- Como "Host Name (or IP address)" coloque "localhost".
- Como "Port" coloque "4000".
- Como "Saved Sessions" coloque "connection".
- Clique "Save" para guardar a sessão.
- 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):
- Rode WinSCP.
- Clique "SSH" no painel à esquerda.
- Clique "Enable Compression".
- Clique "2 only".
- Clique "Session" no painel à esquerda.
- Como "Host name" coloque "localhost".
- Como "Port number" coloque "4000".
- Como "User name" coloque sua conta (b) na máquina
interna i.
- Clique "Protocol SFTP".
- Clique "Save" para guardar a sessão.
- 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.
- 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]
- Na máquina remota, use o comando local:
- putty -ssh -C -L q:localhost:q
-p p -l b localhost #
para criar o túnel ssh
- Na máquina remota, rode o vnc viewer.
- Como "VNC server" coloque "localhost:n"
- Para desativar o servidor de VNC na máquina interna, abra
um shell nela para usar o comando:
- vncserver -kill :n