Secure Shell (SSH)
Para os procedimentos desta documentação, é utilizado o software OpenSSH , os sistemas operacionais conhecidos por integrar o OpenSSH a sua base, são listados nesta página do site do software.
Gerar chave SSH
ssh-keygen gera, gerencia e converte chaves de autenticação para ssh.
Para gerar chave SSH, utilize o comando:
ssh-keygen -t ed25519 -b 512
É recomendado salvar com um específico nome para chave (por padrão o nome é definido por id_ed25519).
Insira uma senha para a chave.
A seguinte mensagem de confirmação será apresentada.
ssh-agent
ssh-agent é um comando para armazenar chaves privadas usadas para autenticação da chave pública. Através do uso de variáveis de ambiente, o agente pode localizar e utilizar automaticamente para autenticação ao efetuar login em outras máquinas usando ssh.
Para carregar o serviço do ssh-agent, utilize o comando:
eval $(ssh-agent)
Para adicionar uma chave:
ssh-add .ssh/chave
Onde:
chave: é o nome da chave a ser adicionada.
Exemplo: ssh-add .ssh/chaveexemplo
Para verificar se possui chaves carregadas, utilize o comando:
ssh-add -l
Utilizar chave SSH
Para copiar sua chave pública SSH para Instância, utilize o comando:
ssh-copy-id -i chave.pub usuário@instância
Onde:
chave: é o nome escolhido para a chave pública;
usuário: é o seu usuário dentro da máquina destino;
instância: é o nome completo da máquina destino.
(Observação: esse comando vai adicionar o arquivo authorized_keys caso o mesmo não exista, se existir, a nova chave será adicionada ao final do arquivo).
Exemplo: ssh-copy-id -i chaveexemplo.pub estag@vm.unicamp.br
SSH_Config
ssh_config é o arquivo de configuração do cliente OpenSSH. Todas configurações do config, podem ser encontradas na página do software.
Exemplo 1: fixando usuário, porta, chave_privada e mantendo o agente na conexão.
Host maquina
User usuario
Port XXXX
Hostname maquina.unicamp.br
ForwardAgent yes
IdentityFile ~/.ssh/chaveexemplo
Onde:
maquina: é o nome dado ao host;
usuario: dado o usuário para acesso na máquina;
XXXX: a porta para acesso à máquina;
maquina.unicamp.br: o nome inteiro da máquina;
yes: para manter o agente de conexão no próximo servidor que for realizado a conexão (não necessitando carregar a chave privada novamente).
~/.ssh/chaveexemplo: o caminho para a chave privada.
Exemplo 2: fixando usuário, chave_privada e criando encaminhamento para o IP:Porta da maquina, para conseguir conectar no VNC da maquina.
Host maquina-tunel-vnc
User usuario
Hostname maquina.unicamp.br
LocalForward PORT localhost:PORT
IdentityFile ~/.ssh/chaveexemplo
Onde:
maquina-tunel-vnc: é o nome dado ao host;
usuario: dado o usuário para acesso na máquina
maquina.unicamp.br: o nome inteiro da máquina;
PORT: porta onde está sendo criada a conexão.
localhost:PORT: o IP e a porta; (Ambos PORT devem ser os mesmos).
~/.ssh/chaveexemplo: o caminho para a chave privada.
Exemplo 3: Utilizando tudo junto com um salto SSH via ProxyCommand, fixando usuário, chave_privada e criando uma conexão por porta que faça o encaminhamento para o IP:Porta da maquina para conseguir conectar no VNC da maquina.
Host maquina
User usuario
Port XXXX
Hostname maquina.unicamp.br
ForwardAgent yes
IdentityFile ~/.ssh/chaveexemplo
Host maquina-tunel-vnc
User usuario
Hostname maquina.unicamp.br
LocalForward PORT localhost:PORT
IdentityFile ~/.ssh/chaveexemplo
ProxyCommand ssh -W %h:%p -q maquina
Onde:
maquina: é o nome dado ao host;
usuario: dado o usuário para acesso na máquina;
XXXX: a porta para acesso à máquina¹;
maquina.unicamp.br: o nome inteiro da máquina;
yes: para manter o agente de conexão no próximo servidor que for realizado a conexão (não necessitando carregar a chave privada novamente).
~/.ssh/chaveexemplo: o caminho para chave privada para máquina.
maquina-tunel-vnc: é o nome dado ao host;
usuario: dado o usuário de acesso na máquina;
maquina.unicamp.br: o nome inteiro da máquina;
PORT: porta onde está sendo criada a conexão.
localhost:PORT: o IP e a porta; (Ambos PORT devem ser os mesmos).
~/.ssh/chaveexemplo: o caminho para chave privada para máquina²;
ssh -W %h:%p -q máquina: utilizado para realizar o direcionamento (-W) com “%h:%p” (host e port da máquina), com salto (-q) para máquina)
Observação 1: aqui é chamado direta a conexão ssh no host “maquina-tunel-vnc”, pois o comando ProxyCommand vai fazer o pulo na máquina automaticamente, quando interpretar a linha do ProxyCommand
Observação 2: caso seja necessário realizar mais de um salto, especificar sempre para a ultima máquina, por exemplo:
Host maquina3
[...]
ProxyCommand ssh -W %h:%p -q maquina2
Host maquina2
[...]
ProxyCommand ssh -W %h:%p -q maquina1
A Máquina1 não necessita de ProxyCommand (já que a mesma não possui antecessor).
Túnel SSH
Para criar uma conexão em uma porta específica do tipo socks, e configurar no navegador, siga os seguintes passos.
Passo 1: no arquivo ssh_config, insira;
Host maquina-tunel-socks
User usuario
Hostname maquina.unicamp.br
DynamicForward XXXX
IdentityFile ~/.ssh/chaveexemplo
Onde:
maquina-tunel-socks: é o nome dado ao host;
usuario: dado o usuário de acesso na máquina;
maquina.unicamp.br: nome inteiro da máquina;
XXXX: porta de conexão para configurar como socks;
~/.ssh/chaveexemplo: o caminho para a chave privada.
Passo 2: configure seu navegador para obter acesso.
Utilizando o Firefox;
No Firefox, clique em menu e selecione Opções.
Em Opções, role até o final da página e clique em Configurar conexão….
Selecione Configuração manual de proxy, em Domínio SOCKS coloque o IP/Porta da conexão.
Após se conectar via SSH, para verificar se funcionou, no Firefox, acesse https://ifconfig.me/, o IP Address deverá estar iniciado como 143.106.XXX.XXX.