Как я могу использовать GNU Parallel для присвоения значений переменным?

Esto es solo una teoría, pero lo que sospecho que está sucediendo es que las conexiones TCP para sus sesiones ssh están muriendo, pero el "servidor en la nube" no lo está detectando. Entonces, cuando va a hacer una conexión a localhost -p 23xx, el proceso ssh todavía está allí y escuchando, pero cuando intenta enviar datos de regreso al Pi, se cuelga hasta que se encuentra el número máximo de retransmisiones de TCP y finalmente decide que la conexión es muerto y sale (dices que se cuelga para siempre, pero apuesto a que si esperas lo suficiente obtendrás un restablecimiento de la conexión ).
Ahora, suponiendo que tiene el Pi configurado para volver a conectarse si el túnel ssh muere, podría pensar que esto debería solucionar el problema. Hay un par de problemas potenciales con esta idea. Primero, es posible que Pi tampoco esté detectando la conexión muerta. Entonces, hasta que intente enviar datos y alcance el límite de retransmisiones de TCP, no verá la conexión inactiva y se reconectará. El segundo problema potencial es que incluso si detecta la conexión inactiva e intenta volver a conectarse, no podrá establecer el oyente en el servidor de la nube porque el ssh anterior todavía está allí y se aferra al puerto.

La solución aquí es configurar ssh para que pueda detectar las conexiones inactivas.Hay algunas formas de hacerlo, TCP KeepAlive y SSH KeepAlive. (referencia:https://unix.stackexchange.com/a/34201/4358)

La configuración de TCP KeepAlive(TCPKeepAliveen ssh config )utiliza la funcionalidad de mantenimiento nativo -de TCP. Básicamente, el kernel envía un ACK de TCP vacío cada X segundos, y cuando no recibe un ACK del otro extremo (o se restablece ), cierra la conexión que notifica a la aplicación (SSH ).

SSH KeepAlive (la configuración ServerAlive*y ClientAlive*)es similar pero opera en una capa más alta. Aquí, el proceso SSH envía datos reales a través de la conexión y busca una respuesta. Esto debería detectar una conexión inactiva tan bien como un TCP KeepAlive normal, sin embargo, es más probable que mantenga la conexión viva, ya que los saltos en el medio pueden reconocer los paquetes TCP KeepAlive e ignorarlos, y agotar el tiempo de espera de la conexión inactiva. Pero un SSH KeepAlive no se puede reconocer porque parece tráfico real en cualquier salto en el medio.

TL; DR:

En el raspberry Pis, agregue la siguiente configuración a la configuración de su cliente ssh(~/.ssh/configo/etc/ssh/ssh_config):

ServerAliveInterval 15
ServerAliveCountMax 1

(documentación)

En el servidor, agregue la siguiente configuración a su configuración del demonio ssh(/etc/ssh/sshd_config):

ClientAliveInterval 20
ClientAliveCountMax 1

(documentación)

Tenga en cuenta que hice el valor del Intervalo ligeramente más alto. La razón de esto es solo para que ambos lados no envíen sus mensajes KeepAlive exactamente al mismo tiempo y se crucen en el cable. No hay daño real en esto, solo una pequeña ineficiencia. Tampoco importa qué lado esté más alto, siempre que sean diferentes.

1
26.02.2018, 01:16
1 ответ

No puede establecer una variable en el shell desde fuera del shell (incluso desde un proceso iniciado por el shell ); ver p.¿Es posible pasar variables de entorno del niño al padre en el espacio del usuario?

Dudo que tenga mucho sentido usar parallelpara esto de todos modos, no es como si configurar una variable llevara mucho tiempo...

2
28.04.2021, 23:50

Теги

Похожие вопросы