Me gustaría configurar SSH y la pantalla de modo que un inicio de sesión siempre se vuelva a conectar a una sesión de pantalla. Idealmente, esa sesión no se cerraría sino que se separaría cuando presione Cd. ¿Cómo se puede lograr esto? ¿Y qué otras configuraciones útiles hay para facilitar mi vida SSH?
fuente
Tengo lo siguiente en mi .bash_profile en mis servidores remotos:
Esto hace dos cosas: primero, configura una función de shell para reemplazar el shell y llevar adelante la conexión ssh-agent, segundo llama a la función después de una pausa durante unos segundos (en caso de que no desee que se inicie la pantalla).
La primera
if
cláusula será verdadera si aún no se está ejecutando screen (-z "${STY}"
) está conectado a un terminal (-t 0
) y no estoy ejecutando sudo (que a veces no cambia$USER
).La
reattach
función primero verificará si se llamó a ssh con un puerto ssh-agent active (-n "${SSH_AUTH_SOCK}"
). Luego reemplazará lo que sea que esté~/.ssh/agent-script
con el archivo de socket actualmente activo y reemplazará la variable de entorno ($SSH_AUTH_SOCK
) con el nuevo valor. Luego, el script reemplazará el shell actual con una solascreen
sesión (asegurándose de que solo exista una). Cualquier argumento a lareattach
función se pasa al comando (${1:+"$@"}
).La última parte primero elimina las sesiones muertas (
screen -wipe
), le permite al usuario (yo) saber que la pantalla se iniciará en breve y, en su lugar, puede regresar al shell presionando Ctrl- C. Luego espera 5 segundos y llama a lareattach
función.fuente
Primero, si usa byobu, puede configurar una nueva sesión de shell para que siempre inicie byobu automáticamente (que es esencialmente una buena configuración de pantalla, aunque las versiones más nuevas pueden usar tmux como back-end). Si realmente no desea byobu, entonces probablemente pueda configurar la pantalla para conectarse manualmente editando su
.profile
u otro script de configuración de shell paraexec screen
ifTERM != "screen"
.Si no le gusta, puede usar el
authorized_keys
archivo para ejecutar un comando específico para conexiones con una clave específica (y puede tener tantas claves como desee). Verman sshd
para más detalles. Te sugiero que hagas que el comando ejecute un script que verifique si la pantalla se está ejecutando y se conecta, o si no comienza una nueva sesión.En cuanto a la desconexión en Ctrl-D, la pantalla le permite configurar asignaciones de teclas en su
.screenrc
. Verman screen
para más detalles. Estás buscando "bindkey".fuente
Tal vez sea totalmente irrelevante para su pregunta, pero ¿alguna vez ha considerado usar TMUX? Tiene una gran cantidad de funcionalidades que está buscando desde el primer momento.
P.ej. si se desconecta de una sesión SSH cuando está bajo TMUX, todo lo que necesita hacer es retroceder y ejecutar "tmux a" para adjuntarlo a su sesión. Desde que comencé a usar TMUX, olvidé qué son los comandos nohup / disown ... si necesita ejecutar algo y cerrar sesión, ejecútelo dentro de tmux y desconecte. El resultado del comando se almacenará en el búfer, por lo que puede revisarlo más tarde.
para adjuntar automáticamente puede agregar algo como a continuación a .bashrc:
o incluso más fácil
Tiene menor huella de memoria y, en general, en mi humilde opinión, es mucho mejor / más fácil de usar.
El acceso directo de meta-d es la asignación predeterminada para separar en TMUX.
fuente
screen -dAr default || screen -AS default
funciona para mi. Agrego eso a mi ~ / .bashrc .Explicando brevemente los interruptores:
d
- Separe la pantalla si todavía está conectada, de otra sesión.A
- Adapte las ventanas en la pantalla al nuevo tamaño del terminal.r default
- Adjuntar a una pantalla llamada predeterminada.Si el primer comando de pantalla (el anterior
||
) no tiene éxito, se ejecuta el segundo:A
- Como se explicó anteriormente ...S default
- Cree la nueva sesión de pantalla con el nombre predeterminado .fuente
Sugiero usar byobu . Esta herramienta utiliza tmux y proporciona una buena barra de herramientas y otras convenientes funciones de cambio de ventanas, teclas de acceso rápido, etc.
Con estos comandos anteriores después de un inicio de sesión SSH exitoso, el sistema intentará y se adjuntará a una sesión byobu-tmux existente, de lo contrario, creará una nueva sesión.
fuente