
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 .bashrc
a 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
ysource
el archivo .bashrc_temp
:
user@remote$ source ~/.bashrc_temp
Ahora puedes usar tu .bashrc
y 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 .bashrc
a /tmp
en 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 ssh
comando para cargar el .bashrc
archivo, en lugar de scp
, que usa diferentes nombres de parámetros de comando.
También notarás que carga un archivo diferente, .bashrc_remote
para 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 ssh
cuando no quiera obtener fuentes y úselo sshs
cuando sí lo desee.
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.