Как выйти из ssh linux

Обновлено: 17.07.2024

SSH - (Secure Shell) - это протокол удаленного управления компьютером с операционной системой Linux. В основном ssh используется для удаленного управления серверами через терминал. Если вы администратор нескольких серверов или даже продвинутый веб-мастер, то наверное, вы часто сталкиваетесь с необходимостью работать с тем или иным компьютером по ssh. В Linux для этого используется сервер ssh на машине, к которой нужно подключится и клиент, на той из которой подключаются.

В этой инструкции мы рассмотрим как пользоваться ssh, а также ее возможности, о которых вы даже не знали. Скорее всего, вы уже знаете как подключиться к серверу по ssh, но у этой утилиты есть еще много возможностей, таких как передача файлов ssh, подключение без пароля или выполнение скрипта на удаленном сервере. Все это мы и рассмотрим далее в статье. Но начнем с самых основ.

Базовый синтаксис

Синтаксис команды выглядит следующим образом:

$ ssh [опции] имя пользователя @ сервер [команда]

Важно заметить что ssh может работать по двум версиям протокола. Версии 1 и 2. Понятное дело, что версия 2 лучше и поддерживает больше типов шифрования и аутентификации. Больше в этой статье об отличиях протоколов мы говорить не будем и я буду подразумевать что вы используете версию 2.

Опции команды SSH

Теперь давайте рассмотрим самые основные опции команды ssh:

Это далеко не все опции утилиты, остальные выходят за рамки данной статьи. Многие настройки работы ssh можно изменять через конфигурационный файл

/.ssh/config но здесь мы это тоже подробно рассматривать не будем.

Настройка сервера SSH

Настройки сервера SSH находятся в файле /etc/ssh/sshd_config. Многие из них мы тоже трогать не будем. Рассмотрим только самые интересные. Сначала откройте файл /etc/ssh/sshd.conf

Порт ssh

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

Поменяйте значение порта на нужное.

Протокол SSH

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

И приведите ее к такому виду:

Рут доступ

По умолчанию Root доступ по ssh разрешен, но такое поведение очень небезопасно, поэтому раскомментируйте строчку:

Доступ только определенного пользователя к SSH

Мы можем разрешить доступ к ssh только для определенного пользователя или группы. Для этого добавьте строчки:

AllowUsers User1, User2, User3
AllowGroups Group1, Group2, Group3

Здесь User1 и Group1 - пользователь и группа к которым нужно разрешить доступ.

Выполнение X11 приложений

Не все знают но есть возможность использовать ssh для запуска полноценных X11 приложений. Об этом мы поговорим ниже, но чтобы все заработало необходимо разрешить эту возможность на стороне сервера, добавьте такую строчку:

Основные опции рассмотрели, перед тем как переходить дальше, не забудьте перезагрузить ssh сервер чтобы сохранить изменения:

service sshd restart

Использование SSH

Основная цель этой статьи - показать интересные и полезные способы использования ssh, о которых, возможно, вы не знали. Переходим к самому вкусному - возможности ssh.

Подключение к серверу

Чтобы просто подключиться к серверу по SSH используйте такую команду:

Выполнить команду

Мы привыкли подключаться к удаленному серверу, а уже потом выполнять нужные команды, но на самом деле утилита ssh позволяет сразу выполнить нужную команду без открытия терминала удаленной машины. Например:

ssh user@host ls

Выполнит команду ls на удаленном сервере и вернет ее вывод в текущий терминал.

Выполнить локальный скрипт

Выполним интерпретатор bash на удаленном сервере и передадим ему наш локальный скрипт с помощью перенаправления ввода Bash:

ssh user@host 'bash -s' < script.sh

Бекап на удаленный сервер и восстановление

Мы можем сохранять бекэп диска сразу на удаленном сервере с помощью ssh. Перенаправим вывод dd с помощью оператора перенаправления |, затем сохраним его на той стороне в файл:

sudo dd if=/dev/sda | ssh user@host 'dd of=sda.img'

Теперь чтобы восстановить состояние диска из сделанной копии выполните:

ssh user@host 'dd if=sda.img' | dd of=/dev/sda

Здесь и выше /dev/sda имя файла вашего жесткого диска.

Аутентификация без пароля

Использование ssh пароля для входа на сервер не только неудобно но и небезопасно, потому что этот пароль в любой момент может быть подобран. Самый надежный и часто используемый способ аутентификации - с помощью пары ключей RSA. Секретный ключ хранится на компьютере, а публичный используется на сервере для удостоверения пользователя.

Настроить такое поведение очень легко. Сначала создайте ключ командой:

ssh-keygen -t rsa

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

Затем отправляем ключ на сервер:

Вот и все. Теперь при попытке подключится к этому серверу пароль запрашиваться не будет, а стазу произойдет подключение. Смотрите подробнее создание открытого ключа для ssh.

Взять пароль из локального файла

Напомню, что хранить пароли в обычных текстовых файлах небезопасно, но если хотите, то да - возможно. Для этого используется оператор перенаправления ввода Bash:

ssh user@host < local_file.txt

Изменить приветствие SSH

При входе по ssh может выводиться приветствие, изменить его очень легко. За это отвечает файл /etc/issue. Просто откройте этот файл и введите нужный текст:

Смотрим неудачные попытки входа SSH

Хотите посмотреть были ли попытки неудачного доступа по ssh к вашему серверу и с каких IP адресов? Запросто, все запросы логируются в файл /var/log/secure, отфильтруем только нужные данные командой:

cat /var/log/secure | grep "Failed password for"

Передача файлов по SSH

Кроме выполнения команд, можно копировать файлы по ssh. Для этого используется утилита scp. Просто укажите файл, который нужно передать, удаленный сервер и папку на сервере, вот:

$ scp /адрес/локального/файла пользователь@ хост: адрес/папки

Кроме утилиты scp, передача файлов ssh может быть выполнена более хитрым способом. Прочитаем файл и с помощью cat, передадим, а там сохраним поток в файл:

cat localfile | ssh user@host "cat > remotefile"

ssh user@host "cat > remotefile" < localfile

Пойдем еще дальше, вы можете сжимать файлы перед передачей с помощью tar, а потом их сразу же на лету распаковывать:

tar czf - /home/user/file | ssh user@host tar -xvzf -C /home/remoteuser/

Такое копирование файлов ssh позволяет отправлять сразу целые папки.

Запуск графических приложений по ssh

Если вам нужно запустить то или иное графическое приложение на удаленной машине необязательно для этого использовать VNC, вы можете обойтись возможностями ssh. Программа будет выполняться на стороне сервера, а вам будет лишь транслироваться окно, чтобы вы могли сделать все что нужно. Причем все данные шифруются. Чтобы эта функция работала, нужно включить ее поддержку на стороне сервера.

Затем просто выполняем команду запуска графического приложения на удаленном сервере вот таким образом:

ssh -XC user@remotehost "eclipse"

Как вы уже видели опция X разрешает перенаправление X11 на стороне клиента, а С - сжатие данных.

Завершение сессии SSH

В файл /etc/ssh/ssh_config. Теперь, чтобы разорвать SSH соединение достаточно нажать Enter и набрать:

Другие управляющие символы можно узнать нажав:

Туннели SSH

С помощью SSH туннелей вы можете пробросить порт с удалённого сервера на локальную машину. Это очень полезно, в первую очередь, для разработчиков. Для того чтобы пробросить порт с удалённой машины локальной используйте опцию -L и такой синтаксис:

$ ssh -L локальный_порт :удаленный_адрес : удаленный_порт пользователь@сервер

Например, сделаем удалённую базу данных доступной локально на порту 5555. Для этого выполните подставив свои значения:

$ ssh -N -L 5555:127.0.0.1:3306 root@losst-1

Опция -N сообщает, что команду на удалённой машине выполнять не нужно. Локальный порт - 5555, поскольку сервер баз данных слушает на локальном интерфейсе удалённой машины, то и здесь надо указывать адрес 127.0.0.1. А порт MySQL по умолчанию 3306. Если же вы хотите чтобы локальный сервис был доступен на удалённой машине, то следует использовать опцию -R:

$ ssh -N -R 5555:127.0.0.1:3306 root@losst-1

Теперь локальная база данных на порту 3306 будет доступна на удалённом сервере при обращении к порту 5555.

Выводы

Теперь вы знаете как пользоваться SSH. Как видите, технология SSH позволяет сделать намного больше чем можно предположить с первого взгляда, и это еще далеко не все. Какие интересные возможности SSH используете вы при повседневной работе? Поделитесь в комментариях!

Favorite

Добавить в избранное

Главное меню » Linux » Как выкинуть из системы пользователя по SSH в Linux

Как выкинуть из системы пользователя по SSH в Linux

Е сли вы вошли в удаленную систему Linux через SSH, вам просто нужно использовать команду exit для выхода из SSH.

Отлично. Но что, если вы хотите отключить какого-либо другого пользователя с помощью SSH-соединения?

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

Выкинуть пользователя из сеанса SSH

Сначала проверьте список пользователей, вошедших в систему на вашем сервере Linux. Это можно сделать разными способами. Мы будем использовать команду who с опцией -u. Этот параметр отображает идентификатор процесса сеанса оболочки входа пользователей.

Вот пример вывода:

Конечно, чтобы выполнить такое действие, вы должны быть пользователем root или sudo.

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

Принудительно завершить сеанс SSH, если SIGNHUP не работает

Если сигнал SIGHUP не работает, отправьте сигнал SIGKILL.

Вы также можете выйти из выбранного сеанса пользователя, если у пользователя более одного сеанса SSH

Если один и тот же пользователь входит в систему из более чем одной системы или терминала, это влияет только на сеанс, который вы убиваете. Это не удалит пользователя из всех сеансов.

Это тот случай, когда ваш сеанс SSH зависает по какой-то причине, например, при отключении сети. Вы можете убить терминал и открыть еще один сеанс SSH с нового терминала, но теперь вы видите, что дважды вошли в систему.

В таком случае вы можете закрыть сеанс, который больше не должен быть активным.

Вы можете определить, какого пользователя начать, по времени входа в журнал, который виден в выходных данных whoкоманды. Не волнуйтесь, в худшем случае вы откажетесь от текущего сеанса. Но тогда вы можете войти снова.

Надеемся, этот быстрый совет помог вам выйти из сеанса SSH в Linux. Ваши вопросы и предложения приветствуются.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

В этой статье собраны наши лучшие приемы для более эффективного использования SSH. Из нее вы узнаете как:

Добавление второго фактора к своему SSH

Второй фактор аутентификации к своим SSH соединениям можно добавить пятью разными способами:

    Обновить свой OpenSSH и использовать ключ шифрования. В феврале 2020 года в OpenSSH была добавлена поддержка ключей шифрования FIDO U2F (Universal Second Factor). Это отличная новая функция, но есть нюанс: только те клиенты и серверы, которые обновились до версии OpenSSH 8.2 и выше смогут пользоваться ключами шифрования, так как февральское обновление вводит для них новые типы ключей. Командой ssh –V можно проверить клиентскую версию SSH, а серверную — командой nc [servername] 22

    В февральскую версию добавили два новых типа ключей — ecdsa-sk и ed25519-sk (вместе с соответствующими сертификатами). Для генерации файла ключа достаточно вставить свой ключ шифрования и запустить команду:


Она создаст открытый и секретный ключи и привяжет их к вашему U2F устройству. Задача секретного ключа на U2F устройстве — расшифровывать секретный дескриптор ключа на диске при активированном ключе шифрования.

Кроме того, в качестве вторичного фактора вы можете предоставить кодовую фразу для ваших ключей.

Ключ-резидент это еще один поддерживаемый OpenSSH тип генерации -sk-ключей. При таком подходе дескриптор хранится на U2F устройстве и позволяет вам иметь его при ключе шифрования когда потребуется. Создать ключ-резидент можно командой:


Затем, для возврата дескриптора обратно в память на новом устройстве, вставьте ключ шифрования и запустите команду:

Безопасное использование agent forwarding

В SHH agent forwarding позволяет удаленному узлу получить доступ к SSH агенту вашего локального устройства. Когда вы пользуетесь SSH с включенным agent forwarding (обычно через ssh -A), в соединении будет два канала: ваша интерактивная сессия и канал для agent forwarding. Через этот канал Unix-сокет, созданный вашим локальным SSH-агентом, соединяется с удаленным узлом. Это рискованный метод, так как пользователь с root доступом на удаленном устройстве может получить доступ к вашему локальному SSH-агенту и потенциально выдавать себя в сети за вас. Пользуясь стандартным SSH-агентом из комплекта Open SSH, вы даже не узнаете, что это случилось. Наличие U2F ключа (или Sekey) поможет вам эффективно заблокировать любые попытки воспользоваться вашим SSH агентом извне.

Даже с такой мерой предосторожности будет хорошей идеей как можно реже использовать agent forwarding. Не стоит пользоваться им на каждой сессии — пользуйтесь agent forwarding только когда вы уверены в его необходимости для текущей сессии.

Выход из зависшей сессии

Прерывание сети, бесконтрольное поведение программ, или управляющая последовательность, которая блокирует ввод с клавиатуры — все это возможные причины разрыва SSH-сессии.

Закончить зависшую сессию можно несколькими способами:

    Автоматически выйти при прерывании сети. В свой .ssh/config необходимо добавить следующее:

(тильда) как управляющий. Команда

. закрывает открытое соединение и возвращает вас обратно в терминал. (Управляющие последовательности можно вводить только с новой строки.) Команда

? выведет полный список доступных в этой сессии команд. Имейте ввиду, что чтобы набрать символ

на международных клавиатурах, может потребоваться нажать клавишу

Как сохранить постоянный терминал открытым на удаленном узле

Есть два различных подхода к тому, как сохранить соединение при переходе между различными сетями или желании ненадолго отключиться.

1. Воспользоваться Mosh или Eternal Terminal

Если вам действительно нужно соединение, которое не спадает, даже когда вы переключаетесь между сетями, используйте мобильную оболочку Mosh. Это защищенная оболочка, которая сначала использует SSH-рукопожатие, а затем переключается на свой собственный зашифрованный канал на все время сессии. Так Mosh создает отдельный, очень стойкий и защищенный, канал, который в состоянии выдержать и прерывания интернета, и смену IP-адреса вашего ноутбука, и серьезные разрывы сети, и многое другое, и все это благодаря магии UDP-соединений, а так же применяемому Mosh протоколу синхронизации.

Для использования Mosh вам нужно будет установить его и на клиент, и на сервер, и открыть порты 60000-61000 для несвязного UPD-трафика до вашего удаленного хоста. В дальнейшем для соединения достаточно будет использовать mosh user@server .

Mosh оперирует на уровне экранов и нажатий клавиш, что дает ему ряд преимуществ перед пересылающим бинарный поток стандартного ввода и вывода между клиентом и сервером SSH. Если нам требуется синхронизировать только экраны и нажатия клавиш, то позднее восстановить прерванное соединение становится намного проще. В то время как SSH будет буферизировать и отправлять все что произошло, Mosh достаточно буферизировать нажатия клавиш и синхронизировать последний кадр окна терминала с клиентом.

2. Использовать tmux

Если вам хочется «приходить и уходить когда вздумается» и держать сессию терминала на удаленном узле, воспользуйтесь мультиплексером терминала tmux . Я обожаю tmux и пользуюсь им постоянно. Если ваше SSH-соединение прервалось, то чтобы вернуться в свою tmux сессию достаточно просто переподключиться и ввести tmux attach . Кроме того, в нем есть такие чудесные функции как внутритерминальные вкладки и панели, аналогичные вкладкам в iOS терминале, и возможность делиться терминалами с другими.

Некоторые любят приукрасить свой tmux с помощью Byobu, пакетом который значительно улучшает удобство использования tmux и добавляет в него много сочетаний клавиш. Byobu поставляется вместе с Ubuntu, и его легко установить на Mac через Homebrew.

Разделение удаленной сессии терминала с другом

Иногда при отладке сложных проблем на ваших серверах может возникнуть желание разделить сессию SSH с кем-то, кого нет в одной с вами комнате. tmux идеально подходит для такой задачи! Достаточно сделать всего несколько шагов:

Обратите внимание, что эти подходы будут работать для выхода из ssh-соединения пользователей, независимо от того, как вы включили SSH на компьютере. Для этих целей не имеет значения, включает ли Mac ssh с удаленным входом или включение ssh из командной строки. Точно так же эти приемы написаны с учетом MacOS и Mac OS X, но в равной степени применимы к завершению пользовательских процессов ssh в Linux и большинстве других разновидностей Unix.

Как выйти из ssh-соединения пользователя

Возможно, наиболее распространенным способом выхода пользователя, подключенного через ssh, является использование команд kill или pkill, нацеленных либо на конкретный рассматриваемый процесс ssh, либо непосредственно на учетную запись пользователя.

Выход пользователя ssh с помощью kill

Сначала получите идентификатор процесса (PID) ssh-соединения пользователя:

ps aux | grep sshd

Затем найдите конкретный процесс ssh-соединения целевого пользователя и выберите его с помощью kill -9. Например, предположим, что мы хотим завершить ssh-соединение пользователя Walrus, а процесс для sshd: Walrus @ ttys011 имеет PID 5821:

Завершение пользовательского SSH-соединения и связанных процессов с помощью pkill

pkill -u username

Это приведет к немедленному выходу из системы с именем пользователя, завершив все процессы этого пользователя.

Подход pkill полезен, потому что он также принимает подстановочные знаки, и вы также можете легко настроить таргетинг на процесс по имени, например, если хотите полностью завершить все процессы ssh.

Существуют и другие возможности для прерывания ssh-соединения другого пользователя, но описанные выше приемы, пожалуй, наиболее интуитивно понятны для опытных пользователей командной строки. Практически любой метод, который позволяет вам увидеть запущенные процессы и определить местонахождение ожидаемых пользователей ssh-соединения, будет работать для достижения того же эффекта; завершение этого процесса приведет к выходу этого пользователя из ssh.

Выход из системы пользователя SSH с Mac с помощью монитора активности

Если вы пользователь Mac, который предпочитает оставаться в графическом интерфейсе, вы также можете использовать Activity Monitor, чтобы найти задачу и завершить ее таким же образом, точно так же, как вы бы принудительно закрыли приложения Mac в целом. Просто откройте Activity Monitor, выполните поиск по ssh и найдите ssh-соединение пользователя, которое вы хотите разорвать, а затем завершите этот процесс с помощью Activity Monitor.

Поскольку этот подход использует Activity Monitor, встроенную утилиту Mac, этот метод, очевидно, не будет работать для компьютеров с Linux, поскольку у них нет этой утилиты, в то время как любой другой подход к нацеливанию процесса будет.

И на всякий случай, если вам интересно, да, все это будет работать в основном одинаково с telnet, демонстрацией экрана или любым другим методом удаленного подключения, ориентируясь на те соответствующие процессы, которые относятся к учетной записи пользователя, вошедшего в систему.

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

Читайте также: