Vejo uma diferença inexplicável no comportamento com ssh no Linux e FreeBSD, e é o comportamento do FreeBSD que eu esperaria da linguagem simples das manpages. Então, algo extra acontece no Linux, mas não sei o que é.
Eu uso o bash como meu shell de login normal em todos os sistemas, tanto Linux quanto BSD. Com uma configuração complexa de vários estágios envolvendo os arquivos de inicialização do bash, eu configurei minhas variáveis de ambiente para todas as encarnações do bash que são shell de "login" ou "interativo", no sentido técnico descrito no início da página de manual do bash.
Agora, a diferença: quando eu faço ssh em um servidor FreeBSD com um comando , por exemplo ssh freebsd-host printenv
, essas variáveis não são definidas. O que, depois de pensar um pouco, é o que eu deveria esperar, já que o shell nesse caso não é nem login nem interativo. Mas, quando eu faço ssh da mesma forma em um host Linux , as variáveis são de fato definidas -- um sinal claro de que o .bash_profile
ou o .bashrc
arquivo foi grokked de alguma forma ou de outra, apesar do não status do shell.
Minha pergunta é, claro, por que e como o Linux pode se comportar dessa maneira? O que faz com que o bash startup seja executado nessas circunstâncias? Toda a configuração sshd é exatamente a mesma e próxima dos padrões upstream, incluindo PermitUserEnvironment=no
. Todos os Linuxes são variantes do Debian, se isso importa.
Uma anedota bônus: Eu tropecei nisso quando li algumas páginas de manual ssh -t host man man
e não notei nada incomum em um Linux remoto, mas em um FreeBSD remoto a página de manual ficou extremamente limitada — porque minha configuração onipresente MANWIDTH=100
não estava lá.