Eu tenho duas máquinas, cliente e servidor.
O cliente (que está protegido por um firewall corporativo) abre um túnel SSH reverso para o servidor, que possui um endereço IP acessível ao público, usando este comando:
ssh -nNT -R0: host local: 2222 [email protected]
No OpenSSH 5.3+, a 0
ocorrência logo após os -R
meios "escolhe uma porta disponível" em vez de pedir explicitamente uma. A razão pela qual estou fazendo isso é porque não quero escolher uma porta que já esteja em uso. Na verdade, existem muitos clientes por aí que precisam configurar túneis semelhantes.
O problema neste momento é que o servidor não sabe qual cliente é qual. Se queremos nos conectar novamente a um desses clientes (via host local), como sabemos qual porta se refere a qual cliente?
Estou ciente de que o ssh relata o número da porta para a linha de comando quando usado da maneira acima. No entanto, eu também gostaria de usar o autossh para manter as sessões vivas. O autossh executa seu processo filho via fork / exec, presumivelmente, para que a saída do comando ssh real seja perdida no éter.
Além disso, não consigo pensar em outra maneira de obter a porta remota do cliente. Assim, eu estou querendo saber se existe uma maneira de determinar esta porta no servidor.
Uma idéia que tenho é de alguma forma usar / etc / sshrc, que é supostamente um script que roda em todas as conexões. No entanto, não sei como obter as informações pertinentes aqui (talvez o PID do processo sshd específico que lida com essa conexão?) Adoraria alguns indicadores.
Obrigado!
fonte
Respostas:
Uma VPN não seria mais apropriada? O OpenVPN é super simples de configurar. Aqui está um exemplo de configuração e alguns links para guiá-lo através do processo de criação do certificado:
Em seguida, crie um novo arquivo
/etc/openvpn/client_server.conf
e coloque o seguinte, alterando oSERVER_IP_ADDRESS
conforme apropriadoEm seguida, crie uma chave por usuário que irá se conectar e crie o arquivo de configuração no diretório ccd
O endereço IP DEVE ser adequado para uma sub-rede / 30 (consulte http://www.subnet-calculator.com/cidr.php ), pois há apenas 2 endereços disponíveis (servidor e cliente) por conexão. Portanto, seu próximo IP do cliente disponível seria 192.168.100.6 e assim por diante.
Agora você tem IPs estáticos por usuário conectado.
Em seguida, forneça o
the [email protected]
arquivo ao usuário final e use o seguinte arquivo de configuraçãofonte
ifconfig-push 192.168.100.2 192.168.100.3
- Não faço ideia por que difere nas plataformas. E sim, significa que 4 IPs são usados por cliente (desperdício, mas a natureza da besta).Se os clientes tiverem nomes de usuário diferentes, você poderá usar
netstat
para descobrir em qual porta osshd
processo do usuário está escutando. Por exemplo:fonte
Você pode alterar o intervalo de portas efêmeras (
/proc/sys/net/ipv4/ip_local_port_range
para Linux) e, em seguida, usar portas alocadas estaticamente fora desse intervalo.fonte
echo $[61002+RANDOM%4532]
escolher um número de porta nesse intervalo.Quero a mesma configuração que você, aumentei o nível de log do servidor SSH para DEBUG e ele mostrou nos logs qual era a porta local do cliente
por exemplo:
comando do cliente:
ssh -N -R0:127.0.0.1:5522 [email protected]
log do servidor:
aí você vê o número da porta
fonte
Você deve conseguir extrair as informações relevantes da saída de:
Execute como root.
fonte
Execute este script no servidor:
Você pode ou não precisar dos dois sudo's. Remova se não o fizer.
PS - Esta é uma versão modificada de uma solução que encontrei em outro lugar há algum tempo. Eu acho que pode ter vindo do StackOverflow, mas não consigo encontrar a referência original.
fonte