Dependente da rede ~ / .ssh / config?

12

No escritório, posso conectar-me a máquinas internas sem um proxy, mas preciso de um proxy para conexões externas. Fora do escritório, posso me conectar a outras máquinas externas sem um proxy, mas preciso usar um dos dois proxies para conectar às máquinas internas.

Se eu puder descobrir uma maneira de autodetectar em qual rede eu estou, posso instruir o ssh a carregar o arquivo de configuração apropriado?

Se não, existe uma solução mais elegante do que escrever um script de shell para ligar simbolicamente o arquivo de configuração apropriado para ~ / .ssh / config (minha melhor idéia até agora)?

Edit: Eu acho que @pcm e JonnyRo entenderam a minha pergunta e vou tentar o que eles sugerem, mas só para deixar claro, eu quero

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |
    
por Nate Parsons 25.04.2012 / 01:08

6 respostas

8

Dependendo de como seu proxy está configurado, você pode simplesmente criar uma entrada de configuração SSH que funcione em qualquer situação. Por exemplo, em uma rede que eu uso regularmente eu tenho que ssh para um host intermediário antes que eu possa fazer uma conexão de saída. Então basicamente eu configuro uma configuração que se parece com isso.

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh [email protected] /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

Então, quando eu não preciso usar um proxy, posso simplesmente executar um comando como ssh myhost.example.org e ficar conectado, mas quando eu preciso do proxy, eu executo o comando ssh myhost.example.org%sshproxy .

Suspeito que você poderia configurar algum tipo de configuração de alias ou preenchimento automático que anexaria automaticamente o %proxy bit.

    
por 25.04.2012 / 09:25
6

Você pode usar a opção -F para selecionar arquivos de configuração diferentes. para os dois casos de rede. Você pode, então, criar aliases que usam os diferentes arquivos de configuração, com base na rede em que você está ou no seu script de login configurar um único alias, com base no seu endereço IP.

    
por 25.04.2012 / 01:58
3

Pergunta antiga, mas algumas ideias neste tópico ajudaram-me e esta é uma solução que surgiu:

Primeiro, a configuração do ssh do servidor proxy .

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

Em seguida, a configuração do Servidor B :

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

A idéia aqui é que o caso padrão está se conectando de um site externo e o ProxyCommand inicia uma conexão ssh ao proxy primeiro e depois se conecta ao server-b . Se, por outro lado, já estivermos localizados na sub-rede local, o ProxyCommand será desativado e nenhuma conexão de proxy será feita com servidor-a .

Independentemente de onde você esteja, você sempre pode acessar server-abc por essa entrada e essa configuração descobre onde você está e configura a conexão de acordo. Para server-xyz , use a mesma ideia.

Eu fiz uma explicação mais completa aqui: link

    
por 30.04.2017 / 13:40
1

Escreva um script de shell que verifique seu IP em relação a um padrão e, em seguida, crie um link simbólico para o script de shell apropriado.

Se por algum motivo o seu alcance de IP é o mesmo para casa e para o trabalho, tente alternar com base no /etc/resolv.conf, que contém os servidores DNS configurados pelo DHCP.

    
por 25.04.2012 / 01:53
0

A opção "Host" em .ssh / config permite alterar a configuração com base no destino. Eu uso isso para ajustar o encaminhamento de portas e com base em onde estou indo.

    
por 25.04.2012 / 02:21
0

Eu examinei essa questão no passado e uma solução possível é ter essa entrada no arquivo de configuração:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

Desta forma, se você estiver fora, você pode $ ssh machine.inside_domain. Se você está dentro e tem resolução dns, você pode máquina $ ssh. Isso funciona bem para mim.

Talvez alguém possa aperfeiçoar essa ideia, talvez alterando a configuração do DNS para que ela automaticamente resolva a máquina para a máquina.interior_domínio se você estiver fora e usar o ponto de entrada do SSH.

    
por 05.05.2015 / 10:54

Tags