cargar alias de shell locales a la sesión ssh dinámicamente

cargar alias de shell locales a la sesión ssh dinámicamente

Cuando inicio sesión en alguna máquina usandosshdeseo mialiasyfuncioneshay. En otras palabras, inicie sesión en alguna máquina en la que deseo poder usar mis atajos de comando.

Necesito que sea dinámico, cada vez que inicio sesión deseo tener alias actualizados.

Notas: Muy a menudo es la primera vez que inicia sesión, sin conocer la máquina ni los archivos que contiene. A veces es un inicio de sesión único. Solo una vez para esa máquina. Es necesario limpiarlo posteriormente y también restaurar la configuración anterior.

Respuesta1

Puede copiarlo temporalmente .bashrca su máquina remota con otro nombre. Por ejemplo, usando .bashrc_temp:

user@local$ scp .bashrc user@remote:~/.bashrc_temp

Luego podrá iniciar sesión en la máquina remota:

user@local$ ssh user@remote

ysourceel archivo .bashrc_temp:

user@remote$ source ~/.bashrc_temp

Ahora puedes usar tu .bashrcy tus funciones. Cuando haya terminado con su trabajo, puede eliminar el archivo ~/.bashrc_temp en la máquina remota y cerrar sesión.

La copia del archivo y el inicio de sesión en la máquina remota se pueden lograr con una función bash:

# copy the .bashrc to the remote machine 
# and log into the remote machine.
# parameter $1: user@remote
function s() {
  scp ~/.bashrc $1:~/.bashrc_temp
  ssh $1
}

Actualizar:

También puede considerar copiar el archivo .bashrca /tmpen su máquina y fuente remotas /tmp/.bashrc_temp.

Actualización 2:

Puede iniciar sesión en la máquina remota utilizandossh-t. Esto utilizará automáticamente su temperatura .bashrc. Función actualizada s():

function s() {
  scp ~/.bashrc $1:/tmp/.bashrc_temp
  ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

Respuesta2

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 utilizar esto para configurar 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úa leyendo.

Respuesta3

jens-na proporcionó una excelente respuesta. Dediqué un poco de tiempo y lo reelaboré un poco para que funcionara un poquito mejor. De esta manera, puede pasar cualquier parámetro a SSH, como los números de puerto. La diferencia es que usa el sshcomando para cargar el .bashrcarchivo, en lugar de scp, que usa diferentes nombres de parámetros de comando.

También notarás que carga un archivo diferente, .bashrc_remotepara que puedas seleccionar exactamente lo que deseas obtener en servidores remotos, en lugar de todo.

sshs() {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

Ejecútelo de la siguiente manera:

sshs user@server

El nombre ' sshs' es para "Fuente SSH". Úselo sshcuando no quiera obtener fuentes y úselo sshscuando sí lo desee.

https://gist.github.com/jonahbron/5549848

Respuesta4

Esto es lo que se me ocurrió. Le permite mantener un archivo rc normal, pero también hacer todo en una conexión ssh (es decir, solo necesita iniciar sesión una vez en lugar de hacer un scp primero).

#copies some environment over to the remote machine
function ssh() {
  /usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}

Sin embargo, no estoy seguro de qué tan grande puede ser ese archivo rc, ya que podría alcanzar su máximo en algún momento.

información relacionada