Подавить ‘Предупреждение: нет доступа к tty’ в ssh

Вопрос или проблема

У меня есть короткий простой скрипт, который компилирует файл .c и запускает его на удаленном сервере с tcsh, а затем просто возвращает управление моему компьютеру (это нужно для школы, мне нужно, чтобы мои программы работали правильно на лабораторных компьютерах, но я хочу редактировать их и т.д. на своем компьютере). Он выполняет команды следующим образом:

ssh -T user@server << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF

Пока что это работает нормально, но каждый раз, когда я это делаю, появляется это предупреждение:

Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.

Я знаю, что это технически не проблема, но это СУПЕР раздражает. Я пытаюсь сделать учебную работу, проверяю вывод своей программы и т.д., а это всё засоряет, и я НЕНАВИЖУ это.

Я использую эту версию ssh на своем компьютере:

OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012

Эту версию tcsh на сервере:

tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux)

И эту версию ssh на сервере:

OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010

В вашем скрипте, похоже, нет ничего специфичного для tcsh, так что просто обойдите это. Например:

ssh -T user@server "/bin/bash -ec 'cd cs4400/$dest ; gcc -o $efile $file ; ./$efile'"

Опция -T ssh отключает пересылку локальных переменных окружения. Поэтому ваша переменная TERM либо отсутствует, либо не определена, в связи с чем ssh не может присвоить подходящий псевдотерминал (pty), что обычно означает, что вы не можете использовать автозаполнение командной строки и элементы управления редактированием командной строки и т.д. Вы можете попытаться исправить ситуацию с помощью:
TERM=vt100 ssh -T user@server ...

Также проверьте ваши переменные окружения с помощью: set и set -o.

Ответ или решение

Чтобы подавить предупреждение «Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.» в SSH-сессии, необходимо обратить внимание на использование параметра -T и тип используемой оболочки на удалённом сервере. Вот подробное объяснение проблемы и возможные пути её решения.

Проблема

Вы используете SSH для запуска скрипта на удалённом сервере, который компилирует и запускает C-программу. Однако при выполнении команды возникает предупреждение, связанное с отсутствием доступа к терминалу (TTY). Это предупреждение появляется из-за того, что SSH не может получить доступ к псевдотерминалу, что может мешать корректной работе некоторых команд и функциональности оболочки.

Причины возникновения предупреждения

Использование опции -T в SSH отключает выделение терминала, что приводит к тому, что сервер не может установить псевдотерминал. В результате это вызывает предупреждение и отсутствуют возможности управления заданиями, такие как переключение между процессами.

Решения

  1. Убрать опцию -T: Если вам не критично отключение терминала, попробуйте выполнить команду без использования -T. Это позволит SSH выделить псевдотерминал, что должно исключить предупреждение:

    ssh user@server << EOF
    cd cs4400/$dest
    gcc -o $efile $file
    ./$efile
    EOF
  2. Установка переменной окружения TERM: Если вы хотите продолжать использовать -T, вы можете вручную установить переменную окружения TERM. Например:

    TERM=vt100 ssh -T user@server << EOF
    cd cs4400/$dest
    gcc -o $efile $file
    ./$efile
    EOF
  3. Замена оболочки: Если проблема возникает из-за особенностей tcsh, можно использовать другую оболочку, такую как bash. Например, вы можете перезапустить сессию в bash для выполнения ваших команд:

    ssh -T user@server "/bin/bash -ec 'cd cs4400/$dest ; gcc -o $efile $file ; ./$efile'"
  4. Используйте set +m в tcsh: Вы также можете попробовать отключить управление заданиями непосредственно в tcsh:

    ssh -T user@server "set +m; cd cs4400/$dest; gcc -o $efile $file; ./$efile"

Резюме

Подавление предупреждения «Warning: no access to tty» можно достичь различными способами, такими как удаление опции -T, установка переменной TERM, использование другой оболочки или отключение управления заданиями в tcsh. Выберите тот метод, который наилучшим образом подходит для вашей ситуации.

Если у вас есть дополнительные вопрос или проблемы с настройкой, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...