No trabalho temos, é claro, um representante da empresa. Eu preciso ssh para algumas máquinas fora da rede da empresa. O proxy, porém, requer autenticação.
Vamos supor que temos as seguintes variáveis:
proxy_user="<username I need to authenticate at the proxy>"
proxy_pass="<password I need to authenticate at the proxy>"
proxy_serv="<hostname of the proxy>"
proxy_port=<port of the proxy>
ssh_user="<remote username I need to login on the ssh-machine>"
ssh_serv="<remote password I need to login on the ssh-machine>"
ssh_port=<ssh-port>
Ao definir a variável env http_proxy e https_proxy da seguinte forma, ferramentas como wget funcionam bem (no servidor remoto, também há um web_server instalado):
$ export env http_proxy="http://$proxy_user:$proxy_pass@$proxy_serv:$proxy_port"
$ wget $ssh_serv
Connecting to <proxy_serv>... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’
Mas com ssh não funciona:
$ ssh $ssh_user@$ssh_server:$ssh_port
ssh: Could not resolve hostname <ssh_server>:<ssh_port> Temporary failure in name resolution
Depois de pesquisar um pouco, descobri que o ssh precisa de um "ProxyCommand". "nc" não é mais recomendado aqui; "ssh -W" deve ser usado. Mas não consegui encontrar um exemplo em que a autenticação fosse necessária. Tentei até agora:
ssh -o "ProxyCommand='ssh -W %h:%p $proxy_user:$proxy_pass@$proxy_serv:$proxy_port'" $ssh_user@$ssh_serv:$ssh_port
Acho que está faltando algo em algum lugar, mas não consegui encontrar uma boa dica (nem nos manuais, nem no Google).
Espero que alguns de vocês possam me ajudar.
Agora, depois de horas pesquisando no Google, finalmente consegui trabalhar para mim com a ajuda do "saca-rolhas". Meu servidor ssh está rodando atualmente na porta 443 (ainda não tentei, se seria possível na 22 também).
~/.ssh/config
~/.corkscrew-auth
Agora consegui me conectar ao meu servidor via:
Apenas para um teste - você já pensou em usar
nc
mesmo assim? Quando eu tentava fazer os comandos de proxy funcionarem, geralmente fazia isso no nível de configuração:/root/.ssh/config
Por exemplo, a configuração teria o seguinte:
Isso significa que sempre que você se conectar a ssh.example.com, ele usará o ProxyCommand abaixo. Sugiro tentar, se você absolutamente não pode usar o utilitário netcat, tenho certeza de que podemos pensar em uma solução alternativa.
Esta é a minha solução para isso:
Primeiro instale este pacote Debian/Ubuntu/Mint:
Exporte credenciais se estiver trabalhando por trás de proxy com autenticação:
Acesse o arquivo de configuração ssh
/etc/ssh/ssh_config
e defina a porta do host remoto:Defina o intervalo ativo do servidor para evitar a perda de conexão:
Defina o ProxyCommand para usar o pacote conectado recentemente instalado:
Feche o arquivo de configuração ssh, então você está pronto para executar a conexão ssh:
Abra o Firefox, defina as configurações de rede para usar apenas o Socket 5 com:
Anfitrião:
localhost
Porto:1080
Ative também
Proxy DNS when using SOCKS v5
.Por fim, na guia de pesquisa do Firefox, digite o seguinte:
Localize
network.proxy.allow_hijacking_localhost
e defina comotrue
.Agora você está pronto para se conectar por trás do proxy e usar o Firefox para explorar o túnel criado.