Estoy respondiendo a mí mismo, ya que finalmente descubrí el secreto. Ni la -t
opción ssh
ni la -l
opción para bash
conducirán al shell de inicio de sesión por sí mismos, pero en combinación funcionan.
ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'
cambia las variables de entorno de directorio, conjuntos, y luego comienza shell de entrada adecuada (la única diferencia que he encontrado hasta ahora es que /etc/motd
no se muestra de esta manera - la cual es normalmente ssh
's o login
responsabilidad' s, no bash
's - aparte de eso todo parece funcionar perfectamente, y todas las variables ambientales son idénticas).
Estos cambios en el entorno / directorio ocurren después de ssh, por lo que no están restringidos por PermitUserEnvironment
configuraciones relacionadas (exactamente como se planeó), sino antes .bashrc
/ .profile
ejecutarse. Esto tiene ventajas y desventajas: es más difícil anular algo que se establece a partir de scripts de bash init PS1
, pero es más fácil empaquetar exactamente los valores correctos en las ssh
líneas de comando y .profile
hacer todo el trabajo pesado.
Y si es realmente necesario, en realidad es bastante fácil hacer que bash ejecute algo después .profile
con una línea de comando como ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'
, muy feo cuando se pone de esa manera, pero estos .profile
archivos alternativos se pueden preparar antes. (Por lo que puedo decir, bash
tiene algunas ubicaciones candidatas para el .profile
script y ejecutará la primera que se encuentre; . file
no tiene tales fallos automáticos, por lo que deberá verificar dónde está su normalidad profile
si desea hacer eso)