Вы должны передать ssh
параметр -t
, чтобы он выделял tty (терминал )на удаленной стороне для запуска вашего скрипта.
Команды, которые должны запрашивать пароль (, такие как sudo
), нуждаются в терминале, чтобы они могли управлять вводом-выводом терминала, например, предотвращать вывод набранных символов, чтобы ваш пароль не отображался, пока вы перепечатав его.
Когда вы запускаетеssh $host
(без команды ), клиент SSH автоматически выделяет терминал (, поэтому -t
не требуется ), но если вы запустите его с помощью команды, такой как ssh $host /path/to/script
, то он не будет выделять терминал, так как для большинства команд терминал не нужен и достаточно просто перенаправить стандартные файловые дескрипторы (stdin, stdout, stderr )... Опция -t
меняет это поведение и выделяет терминал, даже если вы передаете ему командную строку.
См. документацию по параметру-t на справочной странице SSH. Найдите другие ссылки на терминал pty или псевдо -на этой странице (. Кстати, они называют его терминалом pty/pseudo -вместо tty, поскольку терминал не подключен к реальному устройству, такому как клавиатура/монитор или последовательный порт... для этих целей это примерно одно и то же.)
Для этого можно использовать специальные команды, например.:
timedatectl set-timezone America/Sao_Paulo
Но также см. выбранный ответ здесь , чтобы сказать, что существует сдвиг в сторону отказа от отображения сокращенных названий часовых поясов.
Таким образом, вы можете получить отображение -03
вместо ожидаемого BRT
.
Наконец, я не знаю, в каком конкретном случае вы устанавливаете часовой пояс в CentOS. Но если к серверу будут когда-либо обращаться любые люди за пределами Бразилии, вам лучше придерживаться UTC.
Вместо установки для всего сервера временной зоны, отличной от -UTC, вы можете запустить что-нибудь "по бразильскому времени" с помощью cron. Для этого просто поместите CRON_TZ=America/Sao_Paulo
в свою таблицу cron. Затем вы можете указать бразильское время в своих определениях cron.