SSH или Безопасная оболочка Проще говоря, это способ, с помощью которого человек может удаленно получить доступ к другому пользователю в другой системе, но только в командной строке, то есть в режиме без графического интерфейса. Говоря более техническим языком, когда мы подключаемся по ssh к другому пользователю в другой системе и запускаем команды в этой системе машина, он фактически создает псевдотерминал и присоединяет его к оболочке входа в систему пользователя, вошедшего в систему в.
Когда мы выходим из сеанса или время ожидания сеанса после некоторого времени бездействия, SIGHUP сигнал отправляется на псевдотерминал и все задания, которые были запущены на этом терминале, даже задания, которые их родительские задания, инициированные на псевдотерминале, также получают сигнал SIGHUP и принудительно завершаются.
Не пропустите:5 полезных методов обеспечения безопасности и защиты SSH-сервера
Только задания, которые были настроены на игнорирование этого сигнала, остаются после завершения сеанса. В системах Linux у нас может быть много способов запустить эти задания на удаленном сервере или любом компьютере даже после выхода пользователя из системы и завершения сеанса.
Нормальные процессы - это те, которые имеют продолжительность сеанса. Они запускаются во время сеанса как процессы переднего плана и заканчиваются через определенный промежуток времени или при выходе из сеанса. Владелец этих процессов - любой из допустимых пользователей системы, включая пользователя root.
Сиротские процессы - это те, у которых изначально был родительский процесс, который создал процесс, но через некоторое время родительский процесс непреднамеренно умер или потерпел крах, в результате чего init стал родительским для этого процесса. Такие процессы имеют init в качестве их непосредственного родителя, который ожидает этих процессов, пока они не умрут или не закончатся.
Это некоторые намеренно осиротевшие процессы, такие процессы, которые намеренно оставлены запущенными в системе, называются демонами или намеренно осиротевшими процессами. Обычно это длительные процессы, которые однажды инициируются, а затем отсоединяются от любых управляющих терминал, чтобы они могли работать в фоновом режиме, пока они не будут завершены или не выдадут ошибку. Родитель таких процессов намеренно умирает, заставляя потомок выполняться в фоновом режиме.
Существуют различные способы оставить сеансы ssh запущенными после отключения, как описано ниже:
экран - это текстовый оконный менеджер для Linux, который позволяет пользователю одновременно управлять несколькими сеансами терминала, переключаться между сеансами, вести журнал сеанса для запуск сеансов на экране и даже возобновление сеанса в любое время, когда мы пожелаем, не беспокоясь о выходе из сеанса или закрытии терминала.
экранные сеансы можно запустить, а затем отсоединить от управляющего терминала, оставив их работать в фоновом режиме, а затем возобновить в любое время и даже в любом месте. Просто вам нужно запустить сеанс на экране и, когда захотите, отсоединить его от псевдотерминала (или управляющего терминала) и выйти из системы. Когда почувствуете, вы можете повторно войти в систему и возобновить сеанс.
После ввода 'экран' вы будете в новом сеансе экрана, в этом сеансе вы можете создавать новые окна, перемещаться между окнами, блокировать экран и делать много других вещей, которые вы можете делать на обычном терминале.
$ screen.
После запуска сеанса экрана вы можете запустить любую команду и продолжить сеанс, отключив сеанс.
Когда вы хотите выйти из удаленного сеанса, но хотите сохранить сеанс, созданный на этом компьютере. жив, то вам нужно просто отсоединить экран от терминала, чтобы на нем не было управляющего терминала. левый. После этого вы можете безопасно выйти из системы.
Чтобы отсоединить экран от удаленного терминала, просто нажмите «Ctrl + A»
сразу за которым следует «Д»
и вы вернетесь к терминалу, увидев сообщение о том, что экран отключен. Теперь вы можете безопасно выйти из системы, и ваша сессия останется активной.
Если вы хотите возобновить сеанс с отключенным экраном, который вы оставили перед выходом из системы, просто снова войдите в удаленный терминал и введите "Экран -r"
в случае, если открыт только один экран, и если открыто несколько сеансов экрана, запускаются «Экран -r
.
$ screen -r. $ screen -r
Чтобы узнать больше о команде экрана и о том, как ее использовать, просто перейдите по ссылке: Используйте экранную команду для управления сеансами терминала Linux
Tmux это еще одно программное обеспечение, созданное для замены экран. Он имеет большинство возможностей экран, с несколькими дополнительными возможностями, которые делают его более мощным, чем экран.
Он позволяет, помимо всех опций, предлагаемых экраном, разделять панели по горизонтали или вертикали между несколько окон, изменение размера оконных панелей, мониторинг активности сеанса, создание сценариев в режиме командной строки и т.п. Благодаря этим особенностям tmux он получил широкое распространение почти во всех дистрибутивах Unix и даже был включен в базовую систему OpenBSD.
После выполнения ssh на удаленном хосте и ввода tmux, вы войдете в новый сеанс с новым окном, открывающимся перед вами, в котором вы можете делать все, что вы делаете на обычном терминале.
$ tmux.
После выполнения ваших операций на терминале вы можете отсоединить этот сеанс от управляющего терминала, чтобы он перешел в фоновый режим и вы могли безопасно выйти из системы.
Либо ты можешь бежать "Tmux detach"
при запуске сеанса tmux или вы можете использовать ярлык (Ctrl + b, затем d)
. После этого ваш текущий сеанс будет отключен, и вы вернетесь в свой терминал, откуда сможете безопасно выйти из системы.
$ tmux detach.
Чтобы повторно открыть сеанс, который вы отключили и оставили без изменений при выходе из системы, просто повторно войдите в систему на удаленном компьютере и введите "Tmux attach" для повторного подключения к закрытому сеансу, и он все еще будет там и работать.
$ tmux attach.
Чтобы узнать больше о tmux и о том, как его использовать, просто перейдите по ссылке: Использование мультиплексора терминала Tmux для управления несколькими терминалами Linux.
Если вы еще не знакомы с экран или tmux, вы можете использовать нету и отправьте вашу длительную команду в фоновый режим, чтобы вы могли продолжить, пока команда продолжала выполняться в фоновом режиме. После этого вы можете безопасно выйти из системы.
С помощью команды nohup мы говорим процессу игнорировать SIGHUP сигнал, который отправляется сеансом ssh при завершении, благодаря чему команда сохраняется даже после выхода из сеанса. При выходе из сеанса команда отключается от управляющего терминала и продолжает работать в фоновом режиме как процесс-демон.
Вот простой сценарий, в котором мы запустили команда find для поиска файлов в фоновом режиме в сеансе ssh с использованием nohup, после чего задача была отправлена в фоновый режим с немедленным возвратом запроса PID и работа Я БЫ процесса ([JOBID] PID)
.
# nohup find / -type f $ gt; files_in_system.out 2> 1 &
При повторном входе в систему вы можете проверить статус команды, вернуть ее на передний план, используя 'fg% JOBID'
следить за его продвижением и так далее. Ниже вывод показывает, что задание было завершено, поскольку оно не отображается при повторном входе в систему, и содержит вывод, который отображается.
# fg% JOBID.
Еще один элегантный способ позволить вашей команде или отдельной задаче работать в фоновом режиме и оставаться в рабочем состоянии даже после выхода из сеанса или отключения, используя отречься.
Отклонение, удаляет задание из списка заданий процесса системы, поэтому процесс защищен от прерывания во время отключения сеанса, поскольку он не получит SIGHUP оболочкой при выходе из системы.
Недостатком этого метода является то, что его следует использовать только для тех заданий, которые не нуждаются в вводе из стандартный ввод и не нужно писать стандартный вывод, если вы специально не перенаправляете ввод и вывод заданий, потому что когда задание будет пытаться взаимодействовать с стандартный ввод или стандартный вывод, он остановится.
Ниже мы отправили пинг в фоновый режим, чтобы ut продолжала работать и удалялась из списка заданий. Как видно, задание было сначала приостановлено, после чего оно все еще находилось в списке заданий как Идентификатор процесса: 15368.
$ ping tecmint.com> pingout & $ jobs -l. $ disown -h% 1. $ ps -ef | grep ping.
После этого сигнал отказа был передан заданию, и оно было удалено из списка заданий, хотя все еще работало в фоновом режиме. Задание все еще будет выполняться, когда вы повторно войдете на удаленный сервер, как показано ниже.
$ ps -ef | grep ping.
Еще одна утилита для достижения требуемого поведения - это SetSid. Nohup имеет недостаток в том смысле, что группа процессов процесса остается той же, поэтому процесс, запущенный с nohup, уязвим для любого сигнала, отправляемого всей группе процессов (например, Ctrl + C
).
SetSid с другой стороны, назначает новую группу процессов выполняемому процессу, и, следовательно, созданный процесс полностью в недавно выделенной группе процессов и может безопасно выполняться, не опасаясь быть убитым даже после сеанса выйти.
Здесь видно, что процесс "Спать 10м"
был отключен от управляющего терминала с момента его создания.
$ setid спать 10м. $ ps -ef | grep sleep.
Теперь, когда вы повторно войдете в сеанс, вы все равно обнаружите, что этот процесс запущен.
$ ps -ef | grep [s] leep.
Какие способы вы могли бы придумать, чтобы ваш процесс продолжал работать даже после выхода из сеанса SSH? Если вы можете придумать какой-либо другой и эффективный способ, упомяните его в своих комментариях.