bash - secure - sesion ssh
La ejecuciĆ³n del comando ssh no considera.bashrc |.bash_login |.ssh/rc? (5)
Esta pregunta ya tiene una respuesta aquí:
Estoy intentando ejecutar un comando de forma remota sobre ssh, por ejemplo:
ssh <user>@<host> <command>
El comando que debe ejecutarse es un alias, que se define en .bashrc, por ejemplo
alias ll=''ls -al''
Entonces, ¿qué es lo que finalmente se debe ejecutar el siguiente comando?
ssh user@host "ll"
Ya descubrí que .bashrc solo se obtiene con shell interactivo, así que en .bash_login puse:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
y también traté de definir el alias directamente en .bash_login.
También traté de poner la definición / fuente de alias de .bashrc en .bash_profile y también en .ssh / rc. Pero nada de esto funciona. Tenga en cuenta que no puedo cambiar la forma en que se invoca el comando ssh, ya que es parte de algún script de instalación binario. Lo único que puedo modificar es el medio ambiente. ¿Hay alguna otra posibilidad de obtener este alias de origen cuando se ejecuta el comando ssh? ¿Hay alguna configuración ssh que deba ser adaptada?
Abra el archivo ~ / .bash_profile. Si este archivo no existe, crea uno en el directorio de inicio y agrega la siguiente línea
source = $ HOME / .bashrc
salga de su ssh e inicie sesión y deberá obtener las configuraciones de .bashrc trabajando para usted.
De las páginas man de bash:
Los alias no se expanden cuando el shell no es interactivo, a menos que la opción de shell
expand_aliases
se establezca usandoshopt
Hay varias maneras de hacerlo, pero la más simple es simplemente agregar la siguiente línea a su archivo .bashrc
:
shopt -s expand_aliases
En lugar de:
ssh user@host "bash -c ll"
tratar:
ssh user@host "bash -ic ll"
para forzar a bash a usar un "caparazón interactivo".
una alternativa al alias que será visible en todos los scripts es EXPORTAR Y EJECUTAR VARIABLE
# shortcut to set enviroment to insensitive case
export go_I="shopt -s nocasematch"
Ahora en cualquier script que puedas usar
#!/bin/bash $go_I # go Insensitive [[ a == A ]] # evaluates TRUE ( $? == 0) $go_C # maibe want to go back to casesensitive
es útil colocar todos los accesos directos / alias en / path / to / my_commands y editar /etc/bash.bashrc
source /path/to/my_commands
EDITAR:
Como se señala here sobre los caparazones no interactivos ...
# If not running interactively, don''t do anything
[ -z "$PS1" ] && return
# execution returns after this line
Ahora, para cada alias en su archivo bashrc digo que tengo:
alias ll="ls -l"
alias cls="clear;ls"
Crea un archivo con el nombre de ese alias para ll:
user@host$ vi ssh_aliases/ll
#inside ll,write
ls -l
user@host$ chmod a+x ll
Ahora edite .bashrc para incluir:
# If not running interactively, don''t do anything
[ -z "$PS1" ] && export $PATH=$PATH:~/ssh_aliases
Esto hace el trabajo ... aunque no estoy seguro de si es la mejor manera de hacerlo
EDITAR (2)
Solo necesita hacer esto para alias, otros comandos en bashrc se ejecutarán como lo señala David "debe tener ejecutable para que ssh ejecute comandos".