Você pode fazer configurações por host no seu .ssh/config
:
Host ex1
HostName proxied.example.com
User myuser
ProxyCommand /usr/local/bin/corkscrew proxy.example.com 8080 %h %p
Host ex2
HostName nonproxy.example.com
User myuser
IdentityFile id_rsa
Então
ssh ex1
seria ssh para proxied.example.com
e invocaria o proxy corkscrew e
ssh ex2
colocaria ssh em nonproxy.example.com
e usaria o arquivo de identidade da sua pasta .ssh
.
Detecção automática
O que o proxy saca-rolhas faz cria uma conexão por meio do proxy local e aceita a entrada no standard-in para que o ssh se conecte por meio dele. Você pode usar qualquer coisa como um ProxyCommand desde que ele se conecte ao servidor ssh remoto de alguma forma, e aceita entrada no padrão.
Por exemplo, você poderia usar o netcat para estabelecer a conexão com o host remoto e o ssh falaria com o netcat via padrão:
ProxyCommand nc %h %p
Quando você envia um ssh para um servidor com este comando proxy, o ssh invocaria o nc para fazer a conexão tcp ao host remoto na porta 22, então o ssh enviaria seus comandos através do padrão-in de nc.
Isto não serviria para nada, tendo nc estabelecido a sessão tcp ao invés do ssh não te dar nada. Exceto você poderia criar um script wrapper chamado "proxytest" por exemplo, que fez um teste para ver se uma conexão direta poderia ser estabelecida usando nc, e de outra forma tentava usar o saca-rolhas - algo como:
if nc -z $1 $2; then
exec nc $1 $2 # try to connect directly
else
exec corkscrew $3 $4 $1 $2 # set up proxy connection
Então, se qualquer um desses trabalhos funcionar, haverá um padrão disponível que o ssh pode usar para se conectar - seja pelo netcat ou pelo saca-rolhas. Então sua configuração ssh teria:
ProxyCommand proxytest %h %p proxy.example.com 8080
Existe um script pronto aqui que você pode querer experimentar, com testes apropriados e verificação de erros. Role a tela para baixo até a seção "Outros truques".