SSH Config - Múltiplas configurações de proxy

3

Estou desejando tentar configurar uma maneira fácil de gerenciar minhas configurações de proxy SSH. Acho que muitas vezes eu quero SSH para o meu servidor a partir de três locais diferentes - dois locais cada um tem seu próprio servidor proxy que eu preciso usar saca-rolhas, a fim de chegar ao mundo exterior, e um que não tem um servidor proxy em tudo . Existe uma maneira que eu possa configurar o meu arquivo ~ / .ssh / config para reconhecer qual ProxyCommand usar? A razão que eu gostaria de fazer isso é que eu quero configurar o Fetchmail para encapsular meu servidor através de SSH (usando o crontab), e não consigo descobrir como fazer isso funcionar, não importa em qual rede eu esteja.

Felicidades.

    
por NOP 18.01.2012 / 00:17

1 resposta

2

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".

    
por 18.01.2012 / 00:43

Tags