
Regularmente tengo que iniciar sesión en hosts remotos a través de SSH y me gusta usar la opción bash set -o vi
y normalmente tengo que hacerlo cd
en un directorio específico. Dado que estos hosts son efímeros (se crean y destruyen regularmente), no puedo iniciar sesión en ellos y guardarlos en un .bash_profile
archivo / .bashrc
. Así que estaba investigando cómo puedo hacer esto cuando me conecto a través de SSH para no tener que escribir los mismos comandos cada vez que me conecto a un servidor remoto. He probado varias formas de lograr esto, pero ninguna parece funcionar. ¿Alguien puede ayudarme a hacer bien este comando? En pocas palabras, esto es lo que quiero hacer.
cd
a un directorio específico- establecer la opción de bash
set -o vi
Así es como he intentado hacerlo:
ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""
Siento que esto realmente funciona pero que la sesión SSH termina porque una vez que set -o vi
se ejecuta el comando la sesión se desconecta con un mensaje como:
Conexión compartida con remotehost.com cerrada.
¿Hay alguna manera de mantener la sesión abierta después de ejecutar estos comandos o hay otra manera de lograr lo que quiero?
Respuesta1
Algunas opciones:
ssh -t [email protected] 'cd /data && exec bash --login -o vi'
(que funciona con todos los shells similares a POSIX, incluido ksh
/ zsh
/ dash
... ya que -o
es una opción estándar de la sh
utilidad POSIX y vi
resulta ser una de las opciones estándar. Esa línea de comando también es compatible con shells de todas las principales familias de shells, incluido Bourne, csh, rc, fish, por lo que debería funcionar independientemente del shell de inicio de sesión del usuario root de allí)
O:
ssh-t[correo electrónico protegido]'cd /data && exec env SHELLOPTS=vi bash --login'
En realidad, no querrás usar ese segundo. Eso significa que la $SHELLOPTS
variable estará en el entorno y afectará a todas bash
las invocaciones (y las no interactivas heredarán las de shells interactivos causando todo tipo de problemas).
También tenga en cuenta que bash
tiene dos conjuntos de opciones, una que configura con -o
/ $SHELLOPTS
y otra que configura con -O
/ $BASHOPTS
).
Respuesta2
Que sean dos comandos.
- Coloque los comandos que se ejecutarán en el host remoto en un archivo
.bashrc.tmp
. $ scp .bashrc.tmp [email protected]:
$ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"
De esta manera ni siquiera necesitarás hacer una copia de seguridad del archivo original .bashrc
.
Respuesta3
Para simplificar el salto de una carpeta a otra en su host, puede instalar apparix y configurar marcadores en los diferentes lugares donde necesita saltar, luego usarlos to folderX
en apparix:https://micans.org/apparix/man/apparix.html
Respuesta4
Estoy usando un sistema remoto con una identificación de usuario compartida, por lo que no quiero editar los archivos de inicio, ya que afectaría a todos los demás también. Sin embargo , tu publicación aquí me mostró cómo configurar la vi
opción que quería. Esto es lo que puse en mi ~/.ssh/config
archivo.
Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi
lo cual es notablemente simple. No sé qué parte del "cd" quieres.