Fuente .profile y .bashrc en ssh login sin tty

¿Cómo me aseguro de que ssh sources .profile y .bashrc .profile session sin tty?

Tengo una Mac (10.6.8) que estoy usando para varias tareas de UNIX-y, como el alojamiento de repositorys de git. Tengo el inicio de session remoto habilitado a través del panel "Compartir" de Preferences del Sistema. Cuando ssh en la máquina, bash sources ~/.profile , que configuré para get mi file ~/.bashrc y configurar mi ruta MacPorts . El problema es que cuando ejecuto ssh sin un tty , como este:

  • Configuración de "HPN-SSH - SSH / SCP de alto performance" en Mac OS X
  • macOS Sierra rompió la authentication Kerberos SSH
  • SSH en un puerto diferente
  • Terminal Actived Push Notification Utility para OS X e iOS?
  • Verificación de permissions demasiado estricta en Mac OS
  • Autenticación de 2 factores para ssh
  •  ssh myhost echo \$PATH 

    O ejecuta un command git que esencialmente usa ssh de la misma manera:

     git clone ssh://myhost/~/code/myrepo.git 

    Mi file ~/.profile nunca se ~/.profile , por lo que mi variable $PATH falta /opt/local (donde MacPorts ha instalado git ). Estoy consciente de:

    • Puedo configurar git en mi máquina local para usar /opt/local/bin/git-* en mi máquina remota
    • No tendría este problema si estuviera forzando un tty con ssh -t

    Pero no quiero hacer ninguno de esos. Quiero que mi máquina remota ~/.profile mi file ~/.profile sin importar si estoy o no ~/.profile session con un tty.

    ¿Cómo hago realidad ese sueño?

    También: verifiqué el comportamiento en un par de máquinas con Linux (Debian y Fedora), y parece que ambos sistemas ~/.bashrc file ~/.bashrc al iniciar session independientemente de si es un tty . Tenía la printing de que BSD y Linux usan las mismas implementaciones de OpenSSH y bash , por lo que parece que la diferencia en el comportamiento podría provenir de las diferencias en los files de configuration de /etc

  • ¿Puedo evitar que una Mac remota entre en suspensión mediante una connection ssh remota?
  • ¿Qué podría hacer que Ethernet no se conecte a Internet, pero que se conecte a dispositivos en la networking?
  • ¿Cómo puedo montar una carpeta SSH remota en Mac?
  • SSH a localhost en OS X Mountain Lion falla con contraseña no válida (después de la reinstallation y migration)
  • ¿Cómo puedo explorar serveres a través de SSH visualmente?
  • Cómo hacer que automount y sshfs (osxfuse) trabajen con yosemite
  • 3 Solutions collect form web for “Fuente .profile y .bashrc en ssh login sin tty”

    Bash tiene provisiones especiales en su código fuente para la fuente ~/.bashrc cuando es invocado por rshd o sshd . Es una opción de compilation, que dada su experiencia parece no estar activada en OSX.

    Si está iniciando session con una key, puede (ab) utilizar la opción command= en el file ~/.ssh/authorized_keys . Una key con una opción de command es buena solo para ejecutar el command especificado; pero el command en el file authorized_keys ejecuta con la variable de entorno SSH_ORIGINAL_COMMAND establecida en el command especificado por el usuario (vacía para sesiones interactivas). Entonces puede usar algo como esto en ~/.ssh/authorized_keys (por supuesto, no se aplicará si no usa esta key para autenticarse):

     command=". ~/.profile; if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then eval \"$SSH_ORIGINAL_COMMAND\"; else exec \"$SHELL\"; fi" ssh-rsa … 

    Tenga en count que pongo saltos de línea arriba para la legibilidad, pero esto realmente necesita estar todo en una línea.

    ¿Cómo puedo establecer las variables de entorno para un process remoto de rsync? puede tener otras sugerencias útiles.

    Aquí hay un método para tener bash source .bashrc en sesiones no interactivas para que no tenga que codificar las variables de entorno en múltiples lugares:

    1. Establezca PermitUserEnvironment en yes en /etc/sshd_config ( man sshd )
    2. Establezca BASH_ENV en ~/.bashrc en ~/.ssh/environment ( man bash )
    3. Agregue esta línea a la parte superior de su ~/.bashrc , que fonts /etc/profile para sesiones no interactivas:

    Esto esencialmente duplica el entorno de inicio de session interactivo para inicios de session no interactivos, sin tener que codificar valores de entorno de código (por ejemplo, $ PATH) en múltiples lugares.

     if [[ ! $- == *i* ]]; then . /etc/profile fi 

    El paso 3. es necesario solo si tiene las routes de Macports configuradas en /etc/paths como yo. Pero si está configurando esas routes (por ejemplo, /opt/local/bin ) en ~/.bashrc , entonces supongo que no necesitaría el Paso 3.

    Para su situación, debería poder cambiar ~/.bashrc a ~/.profile .

    Tengo ~/.bash_profile source ~/.bashrc , y no uso ~/.profile . Con esta configuration (y los cambios anteriores), las variables de entorno bash (p. Ej., $PATH ) deberían ser idénticas para el inicio de session interactivo, el inicio de session interactivo y las sesiones no interactivas.

    esto fue muy molesto elimine el comentario de esta línea en config-top.h y vuelva a comstackr:

    / * Defina esto si desea que bash intente comprobar si está siendo ejecutado por sshd y el origen de .bashrc si es así (como el comportamiento de rshd). Esto comtesting la presencia de SSH_CLIENT o SSH2_CLIENT en el entorno inicial, que puede ser engañado bajo ciertas circunstancias no poco comunes. * /

    define SSH_SOURCE_BASHRC

    de acuerdo con los CAMBIOS en la fuente, este comportamiento se modificó en bash-2.05a-rc1. pero la página de manual actual todavía reclama el comportamiento anterior:

      Bash attempts to determine when it is being run with its standard input connected to aa network connection, as if by the remote shell daemon, usually rshd, or the secure shell daemon sshd. If bash determines it is being run in this fashion, it reads and executes commands from ~/.bashrc, if that file exists and is readable. It will not do this if invoked as sh. The --norc option may be used to inhibit this behavior, and the --rcfile option may be used to force another file to be read, but rshd does not generally invoke the shell with those options or allow them to be specified. 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).