Приведёт ли удаление ключа SSH во время активного сеанса к выходу из сеанса?

Для канала конец файла виден потребителю (s )после того, как все производители закрыли свои файловые дескрипторы для канала и потребитель прочитал все данные.

Так, в:

{
  echo foo
  echo bar
} | cat

catувидит конец -файла -, как только завершится второй echoи catпрочитает как foo\n, так и bar\n. Тебе больше нечего делать.

Следует иметь в виду, что если некоторые из команд в левой части конвейера запускают какой-либо фоновый процесс, этот фоновый процесс унаследует fd для канала (его стандартный вывод ), поэтому catне увидит eof, пока этот процесс также не умрет или не закроет свой стандартный вывод. Как и в:

{
  echo foo
  sleep 10 &
  echo bar
} | cat

Вы видите, что catне возвращается в течение 10 секунд.

Здесь вы можете перенаправить стандартный вывод sleepна что-то другое, например /dev/null, если вы не хотите, чтобы его (не )вывод направлялся наcat:

{
  echo foo
  sleep 10 > /dev/null &
  echo bar
} | cat

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

{
  echo foo
  exec > /dev/null
  sleep 10
} | (cat; echo "cat is now gone")

Однако обратите внимание, что большинство оболочек по-прежнему будут ожидать эту подоболочку в дополнение к команде cat.Таким образом, хотя вы сразу увидите cat is now gone(после того, как fooбудет прочитано ), вам все равно придется подождать 10 секунд, пока весь конвейер завершит работу. Конечно, в приведенном выше примере было бы разумнее написать:

echo foo | cat
sleep 10

<<ANYTHING...content...ANYTHING- это здесь -документ, он предназначен для того, чтобы сделать стандартный ввод команды файлом, содержащим содержимое . Там это было бы бесполезно. \4— это байт, который при чтении с терминала приводит к сбросу данных, хранящихся на терминальном устройстве, в приложение, читающее с него (, а когда данных нет, read()возвращает 0, что означает конец -из -файл ). Опять же, бесполезно здесь.

3
04.09.2020, 10:55
1 ответ

Физический USB-ключ нужен только тогда, когда нужен закрытый ключ, то есть только при первоначальном подключении к SSH-серверу, по крайней мере, при нормальных обстоятельствах.

0
18.03.2021, 23:07

Теги

Похожие вопросы