Обычный способ подключения к серверу SSH - это ssh username@ip_address
. Но пользователь может захотеть запустить программу только на удаленном компьютере. Таким образом, имя программы следует после обычного аргумента, который есть ssh username@ip_address <program_name>
. Например, ssh username@ip_address ls
. Этот аргумент хорош, за исключением интерактивных программ (которые также принимают пользовательский ввод и обеспечивают вывод), например top
. Выход
Переменная окружения TERM не установлена.
это означает, что (псевдо) терминал не подключен между программами sshd и top. Решение состоит в том, чтобы добавить аргумент, -t
которым теперь становится вся команда ssh -t username@ip_address top
.
Мой вопрос: почему sshd по умолчанию не может использовать псевдотерминал для взаимодействия с неинтерактивными программами, поэтому нет необходимости добавлять -t
аргумент для интерактивных программ?
RequestTTY yes
(илиforce
) в вашей конфигурации.top
может работать в пакетном режиме.Ответы:
Это правда, что, как уже говорили другие, PTY имеют определенные накладные расходы - но главная причина не использовать PTY при запуске удаленной команды в том, что вы теряете информацию.
Обычно, когда вы запускаете команду удаленно через ssh, команды
stdout
иstderr
потоки отправляются локальнымstdout
иstderr
, что означает, что вы можете перенаправить / передать их по отдельности - например:Но если вы используете PTY, все выходные данные отправляются на
stdout
, потому что PTY не имеют отдельных потоков для вывода / ошибки:источник
-t
должно быть значение по умолчанию, и опция, необходимая для его отключения, так что на самом деле незначительное преимущество в производительности - это то, что имеет для меня наибольшее значение в тех случаях, когда это не имеет значения.Страница руководства для
ssh
описывает это:Это особенность и, вероятно, вызвано историческими причинами
rsh
поведения. Это довольно разумно. Большинство команд на самом деле не являются интерактивными, и это не бесплатная операция для выделения PTY (что было более важным 20 лет назад).источник
rsh
неясен, так как у этой программы нет соответствующей опции.rsh
, но определенно есть какое-то влияние не на параметры, а на поведениеrsh
иrlogin
(если есть команда или нет). Вы не можете запустить интерактивную команду (например, rogue (6) или vi (1)), используя rsh; используйте вместо этого rlogin (1). ,Как
ssh
предположить, является ли команда, которую вы вызываете, интерактивной или нет?Этот кошмар усугубляется, когда вы понимаете, что можете войти в систему с операционной системой, отличной от Unix.
Поскольку не было простого решения, один случай должен был быть по умолчанию.
источник