J'essaie de construire un fichier batch Windows, qui démarre putty / plink avec la redirection de port, et rien d'autre. La partie Windows est prête pour l'instant:
start plink.exe -ssh -i key.ppk -L 1234:localhost:80 sampleUser@192.168.0.1
Comme je ne veux pas autoriser l'exécution d'autres commandes après l'authentification, j'utilise ForceCommand
avec une Match User
déclaration:
Match User sampleUser
ForceCommand echo 'Success! Close this window to log out.'
Le problème est que l'exécution de mon fichier de commandes démarre correctement le mastic, mais il se ferme immédiatement après l'exécution de l'écho de mon texte spécifié.
Mon idée est d'utiliser quelque chose comme ça:
ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC
De cette façon, putty / SSH devrait maintenir la connexion active et ne quitte pas ma redirection de port.
J'ai pensé à des commandes comme yes
, ping
ou read
, mais elles
- spamment ma fenêtre de terminal
- sont en train de faire des choses / générer une charge CPU inutile
- pourrait se fermer de façon inattendue, si quelqu'un appuie sur Entrée
Existe-t-il une commande qui ne fera rien, pour toujours, jusqu'à ce que quelqu'un la termine avec Ctrl + C ou ferme la connexion SSH en fermant la fenêtre de mastic?
Que dois-je utiliser waitTillControlC
?
Réponses:
Je ne comprends pas pourquoi toutes les autres réponses veulent utiliser une boucle ici, le sommeil peut attendre assez longtemps pour n'importe quel but pratique et n'utilisera aucun cycle d'horloge pour le faire.
Par exemple, il essaiera ici de dormir pendant cent ans douteux et le fera probablement assez pour se conformer à la demande de toute façon:
Alternativement, cela devrait également bloquer jusqu'à ce que vous tapiez la Enterclé:
la source
Essayez
-N
plutôt cette option. De laplink
documentation :Il s'agit du même comportement que l'
ssh
option-N
, comme décrit dans la page de manuel :la source
I don't want to allow to execute other commands after authentication
.-N
accomplirait cela du côté client, vous pouvez donc simplement supprimer -N pour exécuter d'autres commandes après l'authentification.Cela devrait rester indéfiniment sans consommer une quantité (notable) de puissance CPU.
Je ne sais pas non plus si vous pouvez donner une commande comme dans la
ForceCommand
clause. Vous devrez peut-être mettre la commande dans un script shell.Ce script doit bien sûr être dans un endroit et avoir des autorisations telles qu'aucun utilisateur ordinaire sur le serveur ne puisse y écrire.
Éditer
J'ai trouvé une commande qui semble plus élégante:
tail -f
attend qu'un fichier ou un flux renvoie des octets. (Sinon, utile pour regarder les journaux en temps réel.)/dev/null
Ne renverra jamais d'octets. Et donc la commande dormira pour toujours.la source
ForceCommand echo 'congrats' && while true; do sleep 9999; done
tail -f /dev/null
est techniquement pire que la boucle 9999. Le processus se réveille toutes les secondes au lieu de toutes les 2 heures et 56 minutes.inotify
incorrecte?tail
est optimisée pour tirer partiinotify
lorsqu'elle est disponible. Ce devrait être le cas par défaut avec la plupart sinon la totalité des distributions assez récentes. Cependant, je viens de tester sur un ordinateur portable Linux et j'ai observé une activité parasite avec latail
surveillance/dev/null
, il est donc pire que le sommeil en termes de cycles d'horloge.tail
se réveillera toujours à chaque seconde. Une raison possible du résultat est que vous l'exécutez dans un terminal avec lequel vous pouvez communiquertail
pour une raison quelconque, maissleep
pas. Il n'y a aucune raison detail
réveiller faussement simplement la surveillance/dev/null
.Vous pouvez simplement essayer ce qui suit:
la source
sleep
période plus longue sera plus facile sur le CPU, même si ellesleep 1
devrait être suffisamment sûre sur tout ce qui a été construit au cours des deux dernières décennies ...:
est un raccourci pourtrue
. Je préférerais également unesleep
période plus longue juste par principe.Vous essayez de résoudre ce problème du mauvais côté. Vous ne voulez pas que le shell ne sorte pas, vous voulez que le mastic laisse la fenêtre ouverte.
http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit - décrit exactement ce que vous devez changer. Si vous souhaitez utiliser l'option "uniquement sur une sortie propre", ajoutez simplement
exit 1
à la fin de ForceCommand.Edit: j'ai mal compris; vous ne souhaitez conserver que les ports redirigés, vous ne voulez pas conserver la sortie de ForceCommand. Dans ce cas, http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell ne fait-il pas ce que vous voulez?
la source