Estoy tratando de construir un archivo por lotes de Windows, que comienza masilla / plink con reenvío de puertos, y nada más. La parte de Windows está lista hasta ahora:
start plink.exe -ssh -i key.ppk -L 1234:localhost:80 sampleUser@192.168.0.1
Como no quiero permitir ejecutar otros comandos después de la autenticación, estoy usando ForceCommand
una Match User
declaración:
Match User sampleUser
ForceCommand echo 'Success! Close this window to log out.'
El problema es que la ejecución de mi archivo por lotes inicia la masilla correctamente, pero se cierra inmediatamente después de ejecutar el eco de mi texto especificado.
Mi idea es usar algo como esto:
ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC
De esta manera, putty / SSH debería mantener viva la conexión y no cerrar mi reenvío de puertos.
He pensado en comandos como yes
, ping
o read
, pero
- están enviando spam a mi ventana de terminal
- en realidad están haciendo cosas / generando carga innecesaria de CPU
- podría cerrarse inesperadamente, si alguien presiona enter
¿Hay un comando que no hará nada, para siempre, hasta que alguien lo termine con Ctrl + C o cierre la conexión SSH al cerrar la ventana de masilla?
¿Para qué debo usar waitTillControlC
?
Respuestas:
No entiendo por qué todas las otras respuestas quieren usar un bucle aquí, el sueño puede esperar el tiempo suficiente para cualquier propósito práctico y no usará ciclos de reloj para hacerlo.
Por ejemplo, intentará dormir aquí durante unos dudosos cien años y probablemente lo hará lo suficiente como para cumplir con la solicitud de todos modos:
Alternativamente, esto también debería bloquearse hasta que escriba la Enterclave:
fuente
Prueba la
-N
opción en su lugar. De laplink
documentación :Este es el mismo comportamiento que la
ssh
opción-N
, como se describe en la página del manual :fuente
I don't want to allow to execute other commands after authentication
.-N
lograría esto en el lado del cliente, por lo que podría eliminar -N para ejecutar otros comandos después de la autenticación.Esto debería dormir para siempre sin consumir ninguna cantidad (notable) de energía de la CPU.
Tampoco estoy seguro de si puede dar un comando como en la
ForceCommand
cláusula. Es posible que deba poner el comando en un script de shell.Este script, por supuesto, debe estar en un lugar y tener permisos para que ningún usuario ordinario en el servidor pueda escribirle.
Editar
He encontrado un comando que parece más elegante:
tail -f
espera a que un archivo o secuencia devuelva bytes. (De lo contrario, es útil para ver registros en tiempo real)./dev/null
Nunca devolverá bytes. Y así, el comando dormirá para siempre.fuente
ForceCommand echo 'congrats' && while true; do sleep 9999; done
tail -f /dev/null
es técnicamente peor que el bucle 9999. El proceso se activará cada segundo en lugar de cada 2 horas y 56 minutos.inotify
incorrecto?tail
está optimizado para aprovecharinotify
cuando esté disponible. Este debería ser el caso predeterminado con la mayoría, si no todas, las distribuciones lo suficientemente recientes. Sin embargo, acabo de probar en una computadora portátil Linux y observé una actividad espuria con eltail
monitoreo,/dev/null
por lo que ciertamente es peor que dormir en términos de ciclos de reloj.tail
eso siempre se despierte cada segundo. Una posible razón para el resultado es que lo está ejecutando en un terminal con el que se puede comunicartail
por cualquier razón,sleep
pero no lo hará. No hay ninguna razón por la cual setail
deba despertar espuriamente solo con el monitoreo/dev/null
.Simplemente puede intentar lo siguiente:
fuente
sleep
período más largo será más fácil para la CPU, aunque inclusosleep 1
debería ser lo suficientemente seguro en cualquier cosa construida en las últimas dos décadas ...:
es una abreviatura detrue
. También preferiría unsleep
período más largo solo por principio.Estás tratando de resolver esto desde el extremo equivocado. No desea que el shell no salga, desea que la masilla deje la ventana abierta.
http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit : describe exactamente lo que necesita cambiar. Si desea utilizar la opción "solo en salida limpia", simplemente agregue
exit 1
al final de ForceCommand.Editar: no entendí; solo desea mantener los puertos reenviados, no desea conservar la salida de ForceCommand. En ese caso, ¿ http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell no hace lo que quiere?
fuente