Usando plink.exe ou similar em uma tarefa agendada (para ser executada continuamente)

4

Estou tentando obter plink.exe (do fabricante do PuTTY) para estabelecer um proxy SOCKS local para um site remoto, bem como alguns túneis.

A ação é simplesmente iniciar plink.exe com os parâmetros corretos. Não há perguntas.

As condições vinculam o início a uma conexão de rede disponível, o que achei sensato.

Depois eu também defino:

  • Permitir que a tarefa seja executada sob demanda
  • Executar tarefa assim que possível após a falta de um início agendado
  • Se a tarefa falhar, reinicie a cada: [1 minuto]
  • Se a tarefa em execução não terminar quando solicitada, force-a a parar

Agora, tudo isso funciona perfeitamente no início do sistema. No entanto, quando eu coloco a máquina para dormir e a acordo novamente, isso falha.

Na verdade, logo depois de acordar, a janela do console plink.exe ainda está visível, mas desaparece (provavelmente porque a sessão SSH de antes do tempo de espera longo expirou). No entanto, o status da tarefa ainda é listado como em execução , embora esteja claramente ausente (ou seja, se eu usasse CreateProcess , seria notificado de que o processo havia desaparecido).

O status significa que preciso explicitamente Finalizar e, em seguida, explicitamente Executar novamente.

Alguém conhece um método pelo qual eu possa essencialmente ensinar as tarefas agendadas que ele deve reiniciar o trabalho quando o processo for embora? Não tenho ideia de qual é a métrica exata, mas é evidente que o status Em Execução que estou observando é falso.

A idéia é reiniciar plink.exe (restabelecendo o proxy SOCKS) sempre que ele cair. Faça isso logo após a inicialização e uma tentativa de conexão com falha ou seja, após acordar a máquina do modo de espera.

NB: Estou procurando uma solução que funcione no Windows 7 e Windows 10.

De acordo com as sugestões nos comentários, as duas configurações a seguir foram alteradas:

    
por 0xC0000022L 29.03.2016 / 10:05

1 resposta

1

Eu sou um usuário pesado de plink / ssh e é o proxy SOCKS5 e os recursos de encaminhamento de porta. Aqui estão minhas idéias:

Será difícil confiar apenas no status do processo plink.exe para determinar a conectividade do seu proxy SOCKS5 ou de qualquer encaminhamento de porta SSH. Às vezes, sua conexão SSH pode estar morta por qualquer motivo aleatório, mas o plink.exe não conseguirá detectá-la e continuará "executando".

Para garantir que o encaminhamento de porta do SOCKS5 ainda esteja funcionando, vou até monitorar a porta do proxy SOCKS5 local . Essa é a porta na qual você se conecta ao seu navegador para usar o proxy (plink CLI -D 8008 ). Depois que o plink.exe terminar o handshake SSH, ele fará o encaminhamento de porta e escutará a porta local escolhida (8008 do meu exemplo anterior). Se a conexão SSH não for bem-sucedida, travada, rejeitada, fechada ou negada, a porta do SOCKS5 NÃO será aberta nem escutada. Neste caso, a porta 8008 NÃO estará disponível.

Eu tenho um pequeno script PHP que tentará se conectar a essa porta local (8008):

function check_open_port($host, $port, $timeout)
{
    $connection = @fsockopen($host, $port, $errno, $errstr, $timeout);

    if (is_resource($connection))
    {
        fclose($connection);
        return true;
    }
    else return false;
}

Isso deve criar quase nenhum tráfego. E é fácil codificar em qualquer outro idioma.

Você também pode executar um curl e ver se pode obter um retorno de um site popular por meio do proxy SOCKS5 (cria um pouco mais de tráfego):

curl --socks5 127.0.0.1:8008 http://checkip.amazonaws.com/

Então você pode configurar uma segunda tarefa agendada para executar este script de monitor a cada X minutos e por erro, matar o processo plink.exe e reiniciar (use pskill ).

Você também pode fazer um único script para iniciar o plink.exe, monitorá-lo e reiniciá-lo, se necessário. Para iniciar o plink.exe em segundo plano (em PHP), use psexec exec("psexec -d plink.exe") . Agora, execute imediatamente um loop de monitoramento e certifique-se de que a porta local encaminhada pela porta permaneça aberta.

Tudo isso pode parecer complicado, mas é uma solução muito confiável. Ele irá funcionar com qualquer tipo de ssh port-forwards (não apenas o SOCKS5). Eu tenho passado por muitos set-ups para fazer todo esse trabalho confiável nos últimos 5 anos ... Eu não acho que você pode fazer isso com Tarefas Agendadas e plugar sozinho.

Eu também estou usando klink.exe (KiTTY) em vez de plink.exe, que é um fork do PuTTY. Ele oferece mais algumas opções para automatizar o processo.

    
por 16.02.2018 / 14:26