¿Cómo puedo cambiar directorios y configurar opciones de bash al iniciar sesión en un servidor remoto a través de ssh?

¿Cómo puedo cambiar directorios y configurar opciones de bash al iniciar sesión en un servidor remoto a través de ssh?

Regularmente tengo que iniciar sesión en hosts remotos a través de SSH y me gusta usar la opción bash set -o viy normalmente tengo que hacerlo cden 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_profilearchivo / .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.

  1. cda un directorio específico
  2. establecer la opción de bashset -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 vise 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 -oes una opción estándar de la shutilidad POSIX y viresulta 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 $SHELLOPTSvariable estará en el entorno y afectará a todas bashlas invocaciones (y las no interactivas heredarán las de shells interactivos causando todo tipo de problemas).

También tenga en cuenta que bashtiene dos conjuntos de opciones, una que configura con -o/ $SHELLOPTSy otra que configura con -O/ $BASHOPTS).

Respuesta2

Que sean dos comandos.

  1. Coloque los comandos que se ejecutarán en el host remoto en un archivo .bashrc.tmp.
  2. $ scp .bashrc.tmp [email protected]:
  3. $ 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 folderXen 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 viopción que quería. Esto es lo que puse en mi ~/.ssh/configarchivo.

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.

información relacionada