Как открыть PDF-файл из Unix Putty Box (PGP) [закрыто]

Descargo de responsabilidad

Si su conexión SSH no sobrevive breves cortes de red, entonces hay algo más que no permite que sshy TCP hagan lo normal.

Ver más abajo para más detalles. de todos modos:

The Quickest -and -Dirtiest No -Dependencies Solution

Cree un script de shell como este:

#!/bin/sh -

# Tune these numbers depending on how aggressively
# you want your SSH session to get reconnected.
timeout_options='-o ServerAliveInterval=4 -o ServerAliveCountMax=2'

# 255 is the status OpenSSH uses to signal SSH errors, which
# means we want to connect. All other exit statuses suggest
# an intentional exit.
status=255

# Keep opening the SSH connection and immediately dropping into
# `screen` until an intentional exit happens.
while [ "$status" = 255 ]
do
    ssh $timeout_options -t "$@" screen -dR
    status=$?
    # You can add a `sleep` command here or a counter or whatever
    # you might need as far as rate/retry limiting.
done
exit "$status"

Esto simplemente ejecutará un estúpido bucle simple -que sigue intentando conectarse con sshy adjuntarse a screen. Pase el host o cualquier otra cosa que normalmente pasaría a su invocación sshcomo argumentos de línea de comando -.

La reconexión solo se basa en si SSH informa un error con la conexión, lo que significa que no tiene inteligencia para detectar errores que no sean -SSH como "literalmente no tiene WiFI activado" o lo que sea, pero eso probablemente no importa para ti.

Asumo que tiene ssh-agento una clave SSH sin frase de contraseña -que permitirá que las reconexiones funcionen sin necesidad de una entrada adicional de su parte.

Va a haber una pequeña condición de carrera en la que si presiona ^Cdurante la fracción de segundo imperceptible -humana correcta durante una reconexión, podría terminar matando el script en lugar de pasar el ^Ca el terminal del cliente, por lo que si sospecha que la conexión se cuelga, no haga puré ^Ccon demasiado celo.

La solución de software adicional más sencilla

Puede probar el programa autossh , que debería estar disponible en su repositorio de paquetes de Ubuntu.

Si necesita compilar desde la fuente o auditarlo, es un solo programa C que compila sin bibliotecas adicionales como dependencias, parece tener más inteligencia sobre la verificación de la vivacidad de la conexión que mi truco anterior, y también viene con un conveniente comando de secuencia de comandos rscreenque auto -se adjunta a screen.

Detalles

Cómo sshse recupera normalmente

Solo para verificar, porque no me gusta decir cosas sin controlarme, hice una pequeña prueba antes de responder:

Me conecté a mi WiFi con un dispositivo Linux, hice una conexión SSH a otro dispositivo en mi LAN, verifiqué que tenía una conexión sshen funcionamiento al otro extremo (podía ejecutar comandos, etc. ), luego en el cliente desconectó el WiFi(causando que la interfaz se desactive -configurada :no más direcciones IP ), escribió un montón de caracteres más en la sesión ssh (sin respuesta, por supuesto ), y luego me volví a conectar a mi WiFi -, la reconexión en realidad falló al menos una vez debido a una mala señal y otros factores, luego finalmente me volví a conectar :Esperé unos cinco segundos para que la sesión sshse recuperara, no pasó nada así que presioné una tecla más, y la sesión sshvolvió a activarse inmediatamente, con todas las teclas que había escrito durante la desconexión que aparecían en la línea de comando.

Vea, sshsolo escribe/lee en el socket de red TCP hasta que el sistema operativo le dice que algo salió mal, y TCP es en realidad muy tolerante con caídas de conexión prolongadas.

Abandonado a sus propios dispositivos con la configuración predeterminada del kernel, la pila TCP en Linux tolerará felizmente que la conexión quede completamente en silencio durante muchos minutos antes de declarar la conexión inactiva e informar un error assh-para cuando finalmente se dé por vencido. estamos hablando en el estadio de béisbol de ~30 minutos, o al menos lo suficiente como para durar más que los problemas de conexión que duran un segundo o un minuto.

Debajo de las sábanas, la pila TCP de Linux reintenta gradualmente los mensajes con retrasos cada vez más largos, lo que significa que para cuando su conexión regrese, es posible que esté viendo un retraso adicional antes de que su sesión sshparezca volver "vivo de nuevo.

Por qué esto a veces se rompe

A menudo, algo está causando que la conexión se cierre activamente después de un período de inactividad significativamente más corto que la cantidad que tolerará la pila TCP, y luego no informa ese estado de conexión a su sshcliente.

Los posibles candidatos incluyen:

  1. Los cortafuegos o los enrutadores NAT, que tienen que usar memoria para recordar cada conexión TCP en vivo -como una optimización y algo de mitigación contra los ataques de DOS, a veces simplemente olvidarán su conexión, y luego ignora silenciosamente los paquetes consiguientes, porque los paquetes en medio de una conexión cuando no recuerda la conexión existente parecen inválidos.

  2. Los cortafuegos/enrutadores con un mejor comportamiento -inyectarán un paquete TCP RST, que generalmente se manifiesta como un mensaje de error connection reset by peer, pero el paquete de reinicio es un incendio -y -se olvida, por lo que si la conexión a su cliente todavía tiene problemas en ese momento y también descarta el paquete de reinicio, su cliente pensará que la conexión aún está viva.

  3. El servidor en sí mismo podría tener una política de firewall para descartar silenciosamente paquetes inesperados, lo que interrumpiría los intentos de reanudación de la conexión del cliente siempre que el servidor piense que la conexión se cerró pero el cliente no :su cliente mantiene tratando de continuar la conexión, pero el servidor simplemente lo ignora porque no hay una conexión en vivo a la que pertenezcan estos paquetes en el estado del firewall del servidor.

    Dado que está ejecutando Linux, verifique cuidadosamente el iptables/ip6tables(o nftde su servidor si está usando las cosas nuevas )para ver exactamente lo que está permitiendo en lugar de eliminarlo. Es muy común permitir paquetes nuevos / establecidos / relacionados en el puerto TCP SSH, pero no "no válidos" -si estás dejando caer en silencio todo lo que no está permitido,esta configuración común podría causar este tipo de bloqueos después de breves problemas de conexión.

  4. Su propio servidor SSH puede estar configurado para cerrar la conexión después de un período de inactividad, utilizando una de las opciones de OpenSSH para paquetes de mantenimiento de conexión de cliente TCP o SSH. Por sí mismo, esto no causará bloqueos indefinidos, pero puede ponerlo en uno de los estados descritos anteriormente.

  5. Es posible que simplemente no le esté dando suficiente tiempo para "descolgarse" por sí solo después de llegar al estado en el que su sesión sshcuelga.

-1
06.03.2018, 11:12
1 ответ

El problema se resolvió cambiando el FTP al modo binario antes de transferir los archivos PDF.

¿Algunos (la mayoría? )Los clientes FTP utilizarán de forma predeterminada la transferencia de texto, lo que implica convertir los datos a "8 -bit ASCII" antes de transferir los archivos. Esto puede dañar archivos que no son archivos ASCII de texto sin formato (Los archivos PDF generalmente no son archivos de texto sin formato ).

1
28.01.2020, 05:10

Теги

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