SSH equivalente de .profile / .bashrc

14

Estoy buscando una manera de definir automáticamente algunos alias dentro de mi sesión en cualquier servidor al que me dirija. No puedo ponerlos en los .bashrcarchivos en el servidor porque las cuentas de usuario con las que inicio sesión son compartidas por otras personas y además hay docenas de ellas y mantener un script en cada máquina sería doloroso. Sé que podría usar expectpara escribir los alias automáticamente, pero me preguntaba si OpenSSH tiene algo incorporado que podría usarse para lograr esto.

Ramon
fuente

Respuestas:

7

No hay nada de malo en hacerlo en espera. La otra forma en que lo hice también es bastante sucia, con un script, primero scp el perfil que desea ejecutar, luego ssh, ejecutarlo y mantenerse conectado.

Por lo tanto, coloque todas las configuraciones de perfil en un archivo local .<local username>-<hostname>-init.shy ejecute el script a continuación para iniciar sesión en el host remoto.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"
Sirch
fuente
Me gusta esto porque no requiere ninguna configuración especial en el servidor, ¡bien!
Ramon
4

Puede poner su configuración .bashrcy solo dejar que se ejecuten cuando inicie sesión. Para hacer esto posible, puede pasar una variable de entorno a través de ssh.

.bashrc modificaciones

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config modificaciones:

AcceptEnv ... IAMTHEGREATEST

.ssh/config modificaciones (lado del cliente):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc modificaciones (lado del cliente):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(no probado, pero debería hacerlo)

krissi
fuente
¿Cómo cumple eso el objetivo de configurar las cosas automáticamente en cualquier servidor en el que el OP inicie sesión?
womble
No es asi. Resuelve la parte de la pregunta "las cuentas de usuario con las que inicio sesión son compartidas por otras personas"
krissi
Esto es casi exactamente lo que hago, pero con una diferencia: en lugar de aceptar esa variable de entorno desde afuera, la configuro en la clave SSH. Esto significa que .ssh / optional_keys contiene líneas que comienzan con environment = "IAMTHEGREATEST = forsure" ssh-dss ...
Bron Gondwana
3

Desde la página de comando man ssh (1) , si crea un archivo ~ / .ssh / rc , se ejecutará ANTES de que se ejecute el shell de inicio de sesión del usuario, dando así la posibilidad de realizar tareas de 'preconfiguración' antes de iniciar sesión. El ejemplo dado fue montar recursos compartidos de red antes de iniciar sesión.

Si no desea utilizar archivos ~ / .ssh / rc individuales , puede hacer lo mismo con / etc / ssh / sshrc . Una prueba rápida para verificar su nombre de usuario en particular o algún método de identificación podría restringir que otros incluso se den cuenta de que esto está en su lugar.

/ etc / ssh / sshrc SÓLO se obtiene si ~ / .ssh / rc no existe, por lo que puede lograr efectivamente dos capas de complejidad.

lornix
fuente
¡Tin tin tin, tenemos un ganador!
Pausado hasta nuevo aviso.
Perdido ese! Si bien parece atractivo, esto aún requerirá configurar cada servidor individualmente ya que está en el lado del servidor, ¿verdad?
Ramon
sí, del lado del servidor, pero solo tendrías que buscar un archivo una vez. Realmente no hay una manera fácil de enviar una secuencia de comandos para ser procesados ​​inmediatamente después de iniciar sesión. {Sonríe} Dame un poco, quizás escriba algo ... {¡no hoy!}
lornix
2

Los alias son definidos e interpretados por el shell.

Desafortunadamente no hay forma de sshpasarlos al shell remoto.

Podría escribir un sshcontenedor en el lado del cliente que establezca un entorno agradable en el lado remoto, pero no sería bonito.

Pierre Carrier
fuente
0

Si es posible, almacenaría un pequeño script que inicializaría / definiría todo lo que desea en un servidor accesible desde cualquier lugar y lo ejecutaría después de iniciar sesión en cada servidor.

Laurent
fuente
0

Una posible solución sería poner su script que configura todo en un servidor web al que pueden acceder todos los demás servidores.

Luego, cada servidor debería necesitar un pequeño script para hacer algo como:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

De esa manera solo tiene que actualizarlo en un solo lugar.

Conceder
fuente