sesion secure por para hacer conexion conectarse como comandos comando bash ssh

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 usando shopt

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".