Eu auto-responderei, pois finalmente descobri o segredo. Nem a opção -t para a opção ssh , nem a -l para bash levarão ao shell de login por conta própria - mas em combinação elas funcionam.
ssh [email protected] -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l' altera o diretório, define as variáveis de ambiente e inicia o shell de login apropriado (a única diferença que encontrei até agora é que /etc/motd não é exibido dessa maneira - normalmente é ssh 's ou login é responsabilidade, não bash 's - além de que tudo parece funcionar perfeitamente, e todas as variáveis ambientais são idênticas).
Essas alterações de ambiente / diretório acontecem depois do ssh, portanto, elas não são restritas por PermitUserEnvironment e configurações relacionadas (exatamente como planejado), mas antes de .bashrc / .profile ser executado. Isso tem vantagens e desvantagens - é mais difícil simplesmente sobrescrever algo que é definido a partir de scripts bash como PS1 , mas é mais fácil empacotar exatamente os valores corretos em ssh , e ter .profile fazendo todo o trabalho pesado .
E, se for realmente necessário, é realmente fácil fazer algo depois de .profile com a linha de comando como ssh [email protected] -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\h-\w \"" >~/xxx; bash --init-file ~/xxx' - muito feio quando colocado dessa forma, mas esses arquivos .profile alternativos podem ser preparados antes.
(até onde eu sei, bash tem alguns locais candidatos para o script .profile e executará o primeiro encontrado - . file não tem esses fallbacks automáticos, então você precisa verificar onde está sua% normalprofile se você quiser fazer isso)