Eu entendi completamente qual é o problema.
O sshd deve realmente criar uma sessão de login não interativa, em vez de uma sessão de não login não interativa, mas isso não acontece. Bash se esforça muito para detectar o uso do ssh, e fontes se bashrc se ele acha que é iniciado pelo sshd, independentemente de ser interativo ou de login. Apenas o bash faz isso. Como tenho usado o bash, tenho confiado nesse comportamento de fornecimento, mesmo que não tenha funcionado com outros shells.
Existem duas maneiras de detectar o ssh. Parece se stdin é um socket (1), e se isso falhar, ele procura por algumas variáveis SSH_ (2). Não que recentemente, openssh mudou a maneira como funciona, então (1) nunca funcionará novamente porque stdin é agora um pipe, não um socket. (2) está habilitado em algumas distribuições Linux, mas desabilitado em outras. Eu tenho usado distros onde foi ativado.
Como o que o bash fez foi horrível, e como isso não funciona de maneira confiável, agora estou configurando BASH_ENV em ~ / .ssh / environment, de modo que agora sempre funciona, mas infelizmente agora preciso definir PermitUserEnvironment yes
em sshd_config
...
Também não está claro por que não posso configurá-lo em /etc/environment
, então funciona para todos os usuários.