3 votes

En utilisant plink.exe ou similaire dans une tâche planifiée (à exécuter en continu)

J'ai essayé d'utiliser plink.exe (de l'auteur de PuTTY) pour établir un proxy SOCKS local vers un site distant, ainsi que quelques tunnels.

L'action consiste simplement à démarrer plink.exe avec les bons paramètres. Pas de questions là-dessus.

Les conditions lient le démarrage à une connexion réseau disponible, ce que j'ai trouvé sensé.

Je l'ai également configuré pour :

  • Autoriser la tâche à être exécutée sur demande
  • Exécuter la tâche dès que possible après un démarrage programmé manqué
  • Si la tâche échoue, redémarrer toutes les : [1 minute]
  • Si la tâche en cours ne se termine pas lorsqu'elle est demandée, forcer son arrêt

Maintenant, tout cela fonctionne parfaitement au démarrage du système. Cependant, lorsque je mets la machine en veille et que je la réveille, cela échoue.

En fait, juste après le réveil, la fenêtre de console de plink.exe est toujours visible, mais disparaît (probablement parce que la session SSH avant la mise en veille a expiré depuis longtemps). Cependant, l'état de la tâche est alors toujours listé comme En cours d'exécution bien qu'elle soit clairement partie (c'est-à-dire que si j'utilisais CreateProcess, je serais informé que le processus a disparu).

Cet état signifie que je dois l'arrêter explicitement et ensuite le démarrer à nouveau explicitement.

Est-ce que quelqu'un connaît une méthode par laquelle je peux essentiellement apprendre aux tâches planifiées qu'elles devraient redémarrer le travail lorsque le processus se termine ? Je n'ai aucune idée de quelle est la métrique exacte, mais clairement, l'état En cours d'exécution que j'observe est faux.

L'idée est de redémarrer plink.exe (et donc de rétablir le proxy SOCKS) chaque fois qu'il tombe en panne. Que ce soit juste après le démarrage et une tentative de connexion échouée ou après avoir réveillé la machine de la mise en veille.

NB : Je recherche une solution qui peut fonctionner à la fois sur Windows 7 et Windows 10.


Suivant les suggestions dans les commentaires, les deux paramètres suivants ont été modifiés :

Ne jamais éteindre le disque dur Ne pas permettre à l'ordinateur d'éteindre la carte réseau

0 votes

Votre adaptateur réseau est-il configuré pour s'éteindre pour économiser de l'énergie lorsqu'il est en veille ? Ouvrez devmgmt.msc et double-cliquez sur votre adaptateur réseau, puis allez dans gestion de l'alimentation et assurez-vous de décocher Autoriser l'ordinateur à éteindre le périphérique pour économiser de l'énergie s'il n'est pas grisé.

0 votes

@NetworkKingPin: Je viens de l'éteindre, il n'était pas grisé. Cependant, après avoir mis la machine en veille et l'avoir réveillée, le problème est exactement le même qu'auparavant.

0 votes

Je me demande si il est possible que la raison pour laquelle le programme s'arrête est lorsque qu'il est en veille il arrête le disque dur de bouger. Essayez ceci Dans la boîte des options d'alimentation qui s'ouvre, cliquez sur le signe + à côté de l'option Disque Dur. Ici, vous verrez les paramètres requis sous l'entête Arrêter le disque dur après. Changez la valeur à 0.

1voto

Eugen Points 113

Je suis un utilisateur intensif de plink/ssh et de ses fonctionnalités de proxy SOCKS5 et de redirection de port. Voici mes idées:

Il sera difficile de se fier uniquement à l'état du processus plink.exe pour déterminer la connectivité de votre proxy SOCKS5 ou de toute redirection de port SSH. Parfois, votre connexion SSH pourrait être interrompue pour une raison aléatoire quelconque, mais plink.exe ne pourra pas le détecter et continuera simplement de "tourner".

Pour s'assurer que votre redirection de port SOCKS5 fonctionne toujours, j'en suis arrivé à surveiller le port proxy SOCKS5 local. C'est le port auquel vous vous connectez avec votre navigateur pour utiliser le proxy (plink CLI -D 8008). Une fois que plink.exe a terminé la poignée de main SSH, il fera la redirection de port et écoutera sur le port local que vous avez choisi (8008 dans mon exemple précédent). Si la connexion SSH n'est pas réussie, a planté, a été rejetée, fermée ou refusée, le port SOCKS5 NE sera PAS ouvert et en écoute. Dans ce cas, le port 8008 NE sera pas disponible.

J'ai un petit script PHP qui tentera de se connecter à ce port local (8008):

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

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

Cela devrait créer presque aucun trafic. Et c'est facile à coder dans n'importe quelle autre langue.

Vous pourriez également simplement exécuter un curl et voir si vous pouvez obtenir une réponse à partir d'un site populaire via votre proxy SOCKS5 (crée un peu plus de trafic):

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

Vous pourriez configurer une 2ème tâche planifiée pour exécuter ce script de surveillance toutes les X minutes et en cas d'erreur, fermer le processus plink.exe et le redémarrer (utilisez pskill).

Vous pourriez également créer un seul script pour lancer plink.exe, le surveiller et le redémarrer si nécessaire. Pour lancer plink.exe en arrière-plan (en PHP) utilisez psexec exec("psexec -d plink.exe"). Maintenant, exécutez immédiatement une boucle de surveillance et assurez-vous que le port local redirigé reste ouvert.

Tout cela peut sembler compliqué, mais c'est une solution très fiable. Cela fonctionnera avec tous les types de redirections de port ssh (pas seulement SOCKS5). J'ai passé par de nombreuses configurations pour rendre tout cela fiable au cours des 5 dernières années... Je ne pense pas que vous puissiez le faire avec des tâches planifiées et plink seul.

J'utilise également klink.exe (KiTTY) au lieu de plink.exe, qui est une version modifiée de PuTTY. Cela vous offre quelques options supplémentaires pour automatiser le processus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X