¿Puedo decirle a SSH que envíe los datos solo después de presionar enter o tab y no después de cada pulsación de tecla individual?
¿Puedo decirle a SSH que envíe los datos solo después de presionar enter o tab y no después de cada pulsación de tecla individual?
Respuestas:
No, porque SSH no tiene forma de saber si lo que está escribiendo requeriría una entrada o pestaña para la acción; si está tratando de revisar su historial de comandos, por ejemplo, las ^R
flechas hacia arriba o hacia arriba no serían enviadas por ellos mismos, y eso sería ... desagradable.
Sin embargo, no tiene que esperar entre cada personaje para que aparezca en la pantalla; si sabe lo que tiene que escribir, bátelo tan rápido como desee, y la terminal se pondrá al día en aproximadamente un tiempo de ida y vuelta desde que dejó de escribir, que es tan bueno como saldrá de una configuración de línea amortiguada de todos modos (la pérdida de paquetes es diferente, pero presenta sus propias peculiaridades interesantes).
PuTTY ofrece dos características que pueden ser útiles: "eco local" y "edición de línea local". La edición de línea local almacena todo y solo lo envía al servidor después de un retorno de línea. Eso puede hacer que la línea de comando sea mucho más fácil de manejar, pero también puede hacer que usar un editor de texto sea un infierno.
PuTTY también tiene algunas otras opciones para habilitar / deshabilitar ciertas cosas (algoritmo de Nagle) que pueden afectar la latencia de conexión percibida. A mi entender, el cliente OpenSSH no ofrece todas las características que PuTTY ofrece a este respecto, y no conozco una alternativa de Linux que se compare.
De lo contrario, womble tiene razón.
Mosh fue diseñado para abordar este problema exacto. Está diseñado para su uso en conexiones de alta latencia y poco confiables, y proporciona edición local de eco y línea.
Abra la sesión ssh con ssh host.example.org bash
(o cualquier shell que quiera usar).
Obtendrá el modo de buffer de línea en el shell remoto, lo que significa que no obtendrá un aviso y edición de línea, pero obtendrá eco local y el modo "línea por línea". A veces es útil cuando se trabaja con una conexión muy mala. No todos los programas se ejecutarán correctamente porque no tendrá un pseudo-tty pero la mayoría de las utilidades de UNIX funcionan bien.
Actualizar:
Al utilizar el truco anterior, puede obtener una edición de línea normal ( readline ) en el extremo local mediante el uso de un conveniente programa contenedor llamado rlfe . Solo corre rlfe ssh host.example.org bash
.
Después de haber tenido el mismo problema ( alta latencia y pérdida de paquetes debido a la pésima calidad de datos móviles en algunos lugares), y Mosh no cortarlo para mí (que necesita programas especiales en todos los hosts remotos, fijando UTF8 local o remota en todos los servidores sin romperlos , modificando todos los cortafuegos, y en realidad no proporciona edición de línea local de todos modos) He decidido escribir un pequeño contenedor para proporcionar el modo de edición de línea local para ssh .
De manera predeterminada, simplemente pasa todo a ssh en el modo char-by-char predeterminado, pero puede presionar una tecla de acceso rápido para ingresar al modo de edición de línea local con tecnología readline en cualquier momento. Por lo tanto, puede ingresar (con edición, recuperación de comandos, etc.) toda la línea localmente, y luego, cuando presione enter , se enviará como un paquete TCP al lado remoto.
La ventaja es la edición de la línea de comandos sin demoras (como el antiguo "modo tamponado línea por línea" de telnet cocinado / canónico, pero con comandos de edición superiores proporcionados por la línea de lectura GNU ). Además, no es necesario cambiar nada en servidores o firewalls. Y los editores y otros programas basados en maldiciones continúan funcionando normalmente (aunque con retraso) en el modo char-by-char predeterminado como en la conexión ssh normal.
La desventaja es que debe presionar la tecla de acceso rápido para ingresar al modo de edición de línea local cada vez que lo desee, o debe modificar la solicitud en el host remoto para permitir la detección automática. Además, la finalización del nombre de la pestaña remota actualmente solo funciona si lo regresa al modo char-by-char (o usa el sistema de archivos local en lugar del remoto, según sus preferencias). Sin embargo, es un trabajo en progreso, por lo que las solicitudes de extracción o las ideas viables para mejorar son bienvenidas.
La ventaja no solo es que su shell (y su edición de línea) es local y sin retrasos, sino que también puede navegar por el sistema de archivos remoto y usar la finalización del nombre de shell ( tecla de tabulación ) para los archivos remotos. Además, (la mejor característica en mi humilde opinión) puede utilizar su editor local de elección para la edición sin demora de archivos remotos.
Las desventajas son (especialmente si el enlace también tiene un ancho de banda bajo y no solo una latencia alta) que para cada archivo que se debe editar, debe transferirse completamente a localhost y luego, después de la edición, transferirse nuevamente a remoto. SSHFS proporciona algo de almacenamiento en caché (vea las opciones sshfs (1) cache , cache_timeout , cache_x_timeout ) para aliviar un poco esos problemas. Además, si desea ejecutar algo en remoto, debe usar otra pantalla o prefijar todos los comandos con " ssh remotehost " (por ejemplo ssh remotehost sudo service apache restart
). Consulte la opción ControlMaster en ssh_config (5) para que sea más rápido de ejecutar (y sin solicitud de contraseña).
Puede emular ese comportamiento si solo está ejecutando comandos haciendo,
ssh user @ targetmachine 'mis comandos en una cadena'
pero,
ssh-agent
o escribirlaPuede usar tmux para lograr un eco fluido de su escritura. Ejecute tmux localmente. Si tiene el shell ssh en un panel, y un shell local en un panel debajo de él, entonces desde el panel local puede enviar claves al panel remoto.
tmux send-keys -t top 'ls' C-m
Comandos interactivos y pequeños comandos que escribo directamente en el shell ssh rezagado. Tan pronto como el retraso comienza a dificultar mi escritura, cambio al panel local y uso las teclas de envío. Esto funciona incluso en el medio de escribir un comando.
Para atajarlo, agregué esto a mi .bashrc
function ts {
args=$@
tmux send-keys -t right "$args" C-m
}
Gracias a Christian Pelczarski por explicar las claves de envío: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html
Tendrá que escapar cuando use comillas, por ejemplo
ts git config --global alias.lola \'log --graph --decorate --pretty=oneline --abbrev-commit --all\'
Esto hace lo que quieres. Sin embargo, debe instalar tanto el cliente como el servidor, y OpenSSH upstream nunca adoptó los cambios. https://github.com/hyc/OpenSSH-LINEMODE