В Unix часовой пояс для отдельного процесса можно установить, установив переменную среды TZ. Каждый процесс может иметь различное значение для TZ и, таким образом, отображать другой часовой пояс. Если TZ не установлен, то по умолчанию для всей системы.
Во втором примере вы запустили ssh, указав команду для запуска на удаленном сервере. Поэтому ssh настроил обычный интерактивный сеанс, и ваша оболочка в удаленной системе выполнила всю инициализацию, которую она выполняет для интерактивных сеансов.
В первом примере (ssh root@server 'date'
) вы сказали ssh выполнить определенную команду на удаленном хосте. В этом случае ssh запускает команду без TTY. Когда удаленный сеанс не имеет TTY, удаленный экземпляр вашей оболочки не выполняет всю инициализацию, которую он обычно делал бы для интерактивного сеанса. Поэтому он пропустил поиск некоторых файлов, таких как ваш .profile
или общесистемный профиль.
Похоже, что один из файлов инициализации вашей оболочки устанавливает TZ в один из американских часовых поясов. Когда вы входите в систему в интерактивном режиме, происходит инициализация, и вы видите время в PDT. Когда вы входите не в интерактивном режиме, этот шаг пропускается, и вы получаете другой часовой пояс.
Вы можете установить часовой пояс, когда команды выполняются неинтерактивно:
ssh user@host 'TZ=US/Pacific date'
Или вы можете заставить ssh выделить TTY, что должно заставить вашу удаленную оболочку выполнить дополнительную инициализацию:
ssh -t user@host 'date'
Но то, что вы действительно должны сделать, это исправить файлы инициализации вашей оболочки. Если вы хотите, чтобы ваш часовой пояс устанавливался каждый раз, вам следует перемещать команды, которые устанавливают TZ для выполнения каждый раз, а не только для интерактивных сеансов.