Cómo usar un archivo .bashrc personalizado en el inicio de sesión SSH


21

He descubierto que con la nueva compañía con la que estoy trabajando, a menudo tengo que acceder a servidores Linux con vidas relativamente cortas. En cada uno de estos servidores tengo una cuenta, pero cada vez que se crea una nueva, tengo que pasar por la molestia de transferir mi .bashrc. Sin embargo, es posible que dentro de unos meses ese servidor ya no esté disponible. También tengo que acceder a muchos otros servidores por cortos períodos de tiempo (minutos) en los que simplemente no vale la pena transferirlos a través de mi .bashrc, pero como estoy trabajando en muchos servidores, esto supone mucho tiempo perdido.

No quiero cambiar nada en los servidores, pero me preguntaba si había una manera de tener un .bashrc "por conexión", por lo que cada vez que usaba SSH en un servidor, mi configuración se usaría para esa sesión.

Si esto es posible, sería bueno si pudiera hacer lo mismo con otros archivos de configuración, como los archivos gitconfig.


Esta no es una solución por conexión, pero aún puede encontrarla valiosa. Echa un vistazo a la base en GitHub. Más detalles en esta respuesta en la comunidad Superusuario.
codeforester

Respuestas:


6

Creo que lo que quieres es (en tu .ssh / config en la máquina desde la que te conectas):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

entonces puedes liderar con:

source .bashrc

y sigue tu camino alegre. LocalCommand ejecuta el comando en el servidor al que se está conectando cuando llega allí, justo antes de su sesión real.

También me aseguraría de que los sshds en los servidores estén configurados con PermitLocalCommand yes

Hay muchas formas de ajustar ese LocalCommand para que funcione en su entorno específico: puede curvar desde un servidor web interno o extraerlo de un montaje nfs, por ejemplo.


Un par de notas En primer lugar, creo que cambió el orden de los archivos en el comando scp, ya que quiero transferir mi bash al servidor, y creo que lo ha revertido. En segundo lugar, puede agregar ; source /path/to/.bashrcdespués del comando scp para que se obtenga automáticamente. Finalmente, un aspecto negativo no muy importante de este método es que tengo que escribir mi contraseña dos veces. Pero al final funcionó, así que gracias.
gsingh2011

¡Lo siento por eso! Estaba trabajando fuera de mi cabeza, lo siento mucho por la confusión. ¿Puede configurar configuraciones de clave sin contraseña en su entorno? Tenemos eso en nuestro entorno y es algo hermoso. ¡Me alegro de que eso haya funcionado!
Quinn Murphy

@ gsingh2011: Eso source /path/to/.bashrcse ejecutará en la máquina desde la que se está conectando. Los comandos LocalCommandno tienen acceso a la sesión ssh.
Oliver

@ Oliver Tienes razón. Me he conformado con automatizar el abastecimiento del .bashrc desde la computadora remota. Tengo que cambiar algunas cosas en el lado del servidor en el primer inicio de sesión, pero es mucho más conveniente que lo que tenía que hacer antes.
gsingh2011

16

Creo que sshrc es lo que estás buscando: https://github.com/Russell91/sshrc

sshrc funciona igual que ssh, pero también genera ~ / .sshrc después de iniciar sesión de forma remota.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Puede usar esto para establecer variables de entorno, definir funciones y ejecutar comandos posteriores al inicio de sesión. Es así de simple y no afectará a otros usuarios en el servidor, incluso si también usan sshrc. Para una configuración más avanzada, continúe leyendo.


Por favor, deje de enviar correo no deseado con publicaciones de solo enlace. Eres perfectamente capaz de agregar comentarios (de todos modos, tus publicaciones relacionadas con sshrc).
Deer Hunter

3
Estoy trabajando en arreglarlos todos!
RussellStewart

Hecho. La primera vez tuve la tentación de hacer una breve publicación de solo enlace. Ahora lo se mejor.
RussellStewart

1
Escribí hace mucho tiempo (antes de sshrc) un sshrc similar: github.com/fsquillace/pearl-ssh Es simplemente más eficiente, pequeño y sin dependencias xxd.
user967489

1

Si nunca antes ha accedido al servidor, no habrá ninguna entrada en ~ / .ssh / known_hosts para ello.

Puede buscar un host conocido dado con "ssh-keygen -F", pero tendrá que probar esa salida (grep) ya que ssh-keygen no devuelve falso por omisión. Tenga en cuenta que si se refiere a un host con diferentes identificadores (dirección IP, nombre de host, FQDN), cada uno de ellos se trata como instancias separadas.

Podría escribir un contenedor para ssh que transfiera su entorno de usuario a ese host en el primer inicio de sesión:

ssh-newenv () {if! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 encontrado:"; luego rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; ssh $ 1; }

Si desea hacer esto más robusto, puede verificar la existencia de un archivo de entorno conocido, hash u otro marcador en el host remoto.


0

No sé si hay un .bashrc por sesión.

Otra solución sería escribir un pequeño script que transfiera todas sus configuraciones favoritas a su nueva carpeta de inicio.

Tal vez solo haga una carpeta con todas sus configuraciones con rutas y simplemente transfiéralas con scp

me gusta

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

y luego un

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

Eso ahorra tiempo.


0

No creo que sea posible, dado que ssh no tiene nada que ver con tu .bashrc. Es el shell que carga ese archivo, no ssh.

Algunas ideas:

  1. Configure su directorio de inicio remoto cuando inicie sesión por primera vez.
  2. Use NFS para montar su directorio de inicio que contiene su .bashrc en cada servidor. De esa manera, tiene la misma configuración en todas partes.
  3. Si está de acuerdo con algunas variables de entorno transmitidas a los servidores remotos, debe verificar la SendEnvopción (consulte la ssh_configpágina del manual para obtener más información). Si el servidor está configurado correctamente (es decir, tiene el adecuado AcceptEnven sshd_config), puede usarlo SendEnvpara copiar sus variables de entorno al host remoto.
  4. No sé si eso funciona, pero tal vez pueda usar mal la ProxyCommandconfiguración (consulte la ssh_configpágina de manual) para enviar sus .bashrcarchivos u otros antes de conectarse al host remoto. Sin embargo, eso requeriría algunas pruebas. Además, esté preparado para que esto pueda interferir con scp.

0

Creo que https://github.com/fsquillace/pearl-ssh hace lo que necesita.

Lo escribí hace mucho tiempo antes de que naciera sshrc y tiene más beneficios en comparación con sshrc:

  • No requiere dependencias en xxd para ambos hosts (que pueden no estar disponibles en el host remoto)
  • Pearl-ssh usa un algoritmo de codificación más eficiente
  • Es solo ~ 20 líneas de código (¡realmente fácil de entender!)

Por ejemplo:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.