No unix, o fuso horário de um processo individual pode ser definido definindo a variável de ambiente TZ. Cada processo pode ter um valor diferente para o TZ e, assim, mostrar um fuso horário diferente. Se o TZ não estiver definido, existe um padrão para todo o sistema.
No segundo exemplo, você executou o ssh especificando um comando para ser executado no servidor remoto. Então, o ssh configurou uma sessão interativa comum, e seu shell no sistema remoto fez toda a inicialização que ele faz para sessões interativas.
No primeiro exemplo ( ssh root@server 'date'
), você disse ao ssh para executar um comando específico no host remoto. Neste caso, ssh executou o comando sem um TTY. Quando a sessão remota não tem um TTY, a instância remota do seu shell não faz toda a inicialização que normalmente faria para uma sessão interativa. Por isso, ignorou o fornecimento de alguns arquivos como seu .profile
ou o perfil do sistema.
Parece que um dos arquivos de inicialização do seu shell define o TZ como um dos fusos horários dos EUA. Quando você faz logon no sistema interativamente, essa inicialização ocorre e você vê os horários no PDT. Quando você faz login não interativamente, essa etapa está sendo ignorada e você está obtendo um fuso horário diferente.
Você pode definir o fuso horário ao executar comandos de maneira não interativa:
ssh user@host 'TZ=US/Pacific date'
Ou você pode forçar o ssh a alocar um TTY, o que deve fazer com que o seu shell remoto execute uma inicialização adicional:
ssh -t user@host 'date'
Mas o que você realmente deveria fazer é corrigir seus arquivos de inicialização do shell. Se você quer que seu fuso horário seja definido toda vez, então você deve mover os comandos que configuram o TZ para ser executado toda vez, não apenas para sessões interativas.