Переадресация соединений
Одним из распространенных способов использования SSH является переадресация соединений, позволяющая локальному подключению создавать туннель через удаленный хост (или удаленной машине получать доступ к туннелю через локальную машину). SSH также может выполнять динамическую переадресацию с помощью протоколов, таких как SOCKS5, которые включают информацию пересылки для удаленного хоста.
Важные опции:
LocalForward: Этот параметр используется для определения соединения, которое будет перенаправлять трафик локального порта на удаленную машину, туннелируя его в удаленную сеть. Первым аргументом должен быть локальный порт, на который вы хотите направить трафик, а вторым – адрес и порт, на которые вы хотите направить этот трафик.RemoteForward: Этот параметр используется для определения удаленного порта, на который можно направить трафик (чтобы туннель выходил из локальной машины). Первым аргументом должен быть удаленный порт, по которому трафик будет направляться на удаленную систему. Второй аргумент – адрес и порт, на который нужно направить трафик, когда он прибывает в локальную систему.DynamicForward: Позволяет настроить локальный порт, который может использоваться с протоколом динамической пересылки, таким как SOCKS5. Трафик с использованием протокола динамической пересылки может быть затем направлен на этот порт на локальном компьютере и на удаленной машине (он будет маршрутизироваться в соответствии с включенными значениями).
Эти опции можно использовать для перенаправления портов в обе стороны:
# This will allow us to use port 8080 on the local machine# in order to access example.com at port 80 from the remote machineHost local_to_remoteLocalForward 8080 example.com:80# This will allow us to offer access to internal.com at port 443# to the remote machine through port 7777 on the other sideHost remote_to_localRemoteForward 7777 internal.com:443
Настройка ssh клиента
В Debian настройки клиентской части ssh делятся на глобальные и пользовательские. Глобальные клиентские настройки находятся в файле /etc/ssh/ssh_config и применяются ко всем пользователям. Пользовательские настройки могут находиться в домашнем каталоге пользователя, в ~/.ssh/config и применяются к одному пользователю. Файл пользовательских настроек не создаётся автоматически в отличие от файла глобальных настроек клиентской части ssh. Для большинства выполняемых задач подойдут настройки по умолчанию, но для удобства использования, так сказать для тюнинга или для выполнения нестандартных задач клиентские настройки изменяются. Рассмотрим вкратце некоторые из этих настроек. Полезно помнить о приоритетах настроек: высший приоритет имеют ключи командной строки, затем следуют настройки пользователя, а после них используются глобальные настройки клиентской части.
Параметр Host. Ограничивает множество хостов, к которым применяются последующие (до ближайшей новой директивы Host) директивы, по указанным шаблонам (хост должен соответствовать хотя бы одному шаблону). Шаблон, состоящий из одного символа *, соответствует любому хосту. Под хостом в данном контексте понимается аргумент имя_хоста передаваемый в командной строке (т.е. никаких преобразований перед сравнением не выполняется).
Параметр HostName. Устанавливает соответствие между псевдонимами, сокращениями и настоящими именами хостов. По умолчанию используется имя, передаваемое в командной строке. Допустимо непосредственное указание IP-адресов.
Параметр Port. Порт на удалённой машине, к которому следует подключаться. Значение по умолчанию — 22
Параметр User. Имя пользователя, которое следует использовать при регистрации в удалённой системе. Полезно, когда на разных серверах используются разные имена, т.к. избавляет от надобности вспоминать каждый раз нужное имя.
В качестве примера я создам файл пользовательских настроек /home/selifan/.ssh/config следующего содержания:
Host sunup
HostName sunup.aitishnik.local
Port 2203
User andrey
Host windbag
HostName windbag.nnov.ru
Port 2280
User joker
Host 212.177.65.1
HostName 212.177.65.1
Port 2222
User forester
Теперь при подключении к компьютерам sunup.aitishnik.local, windbag или по ip адресу 212.177.65.1 мне не нужно вспоминать, ни имя пользователя, ни ssh порт подключения, достаточно после ssh набрать имя сервера. Просто и удобно! Описания всех параметров, значений и некоторых примеров находятся в man ssh_config. Продолжаем настраивать SSH и читаем «Генерация ключей SSH».
Об авторе:
Меня зовут Андрей Золкин. Из более, чем пятнадцати лет работы в сфере информационных технологий, десять лет работаю с системами, базирующимися на открытом исходном коде. На страницах сайта Aitishnik.Ru веду блоги по CMC Joomla и Debian GNU/Linux.
5 ответов
Да, вы можете удалить только один ключ. Просто откройте его в редакторе и удалите оскорбительную строку. Число после двоеточия в сообщении об ошибке — номер строки, поэтому это строка для удаления — строка 1 в вашем примере ..
ответ дан
25 May 2018 в 23:33
Я только недавно начал использовать хост-ключ, но когда я перепутал с ними, это, как правило, один ключ в каждой строке, поэтому создайте резервную копию файла и удалите его по одному, пока не найдете правильный. Затем добавьте остальных.
Также, основываясь на этой ошибке и не представляя, что это такое, это может быть первый ключ хоста в файле, который является проблемой настолько открытой вверх по файлу с vim
vim ~/.ssh/known_hosts
и нажмите
dd
, затем сохраните его.
ответ дан
25 May 2018 в 23:33
Использование ssh-keygen -R hostname не всегда будет работать. Если у вас есть более новая версия SSH, которая «скрывает» имена хостов, чтобы предотвратить захват ssh-agent, очевидно, что ssh-keygen не может разобрать имя хоста.
Например, у меня есть хост с именем build- node-01, и я подключился к нему и принял ключ. Затем я перестраиваю его с нуля, получая новый отпечаток от хоста, и я пытаюсь подключиться, я получу предупреждение о конфликте в строке X (скажем, 3). Я запускаю ssh-keygen -R hostname, но в следующий раз, когда я пытаюсь подключиться, я все еще получаю предупреждение о конфликте. Я просмотрел файл только для того, чтобы узнать, что имя хоста было хэшировано и появилось как Bu4Ch@R@4D0M57uFF вместо читаемого имени хоста.
В этом случае единственный способ успешно удалить удаляющий хост-узел — использовать
Чтобы сделать это sed еще одним шагом, вы можете сделать резервную копию known_hosts на случай, если вы удалите неправильную строку, в этом случае просто добавьте .bak (или любое расширение) в — i, чтобы создать резервную копию с этим расширением. Использование ssh-keygen делает это автоматически.
ответ дан
25 May 2018 в 23:33
Просто чтобы поделиться другим простым и легким ответом, я только что нашел. Удаление имени хоста для меня, так как файл known_hosts хэшируется. Однако, я МОЖЕТ вручную отредактировать запись хоста на основе номера строки в сообщении об ошибке. Как уже отмечал Майк Скотт, в сообщении об ошибке содержится номер строки номера вызывающего абонента.
Или я могу это сделать. Отсюда: как исправить оскорбительный ключ в файле ssh known_hosts
Я получил этот бит волшебства cli
Замените x номером строки и voila. Он также предлагает ответ perl, если sed не будет работать.
ответ дан
25 May 2018 в 23:33
В этом случае 10.20.120.211 — это хост, который я хочу удалить из моего файла known_hosts, убедитесь, что вы выбрали специальные символы, такие как (.)
ответ дан
25 May 2018 в 23:33
Утилиты SSH
К серверным утилитам OpenSSH относятся:
- sshd (OpenSSH Daemon) — программа демон для ssh. sshd ожидает подключений от клиентов.
- sftp-server (серверная подсистема SFTP) — это программа, которая участвует в передачи файлов по протоколу SFTP. sftp-server не предназначен для прямого вызова, обычно она задействуется автоматически демоном sshd.
Итак, на сервере основного внимания требует sshd, а программа sftp-server будет запущена автоматически по мере необходимости.
К клиентским утилитам OpenSSH относятся:
- ssh (клиентская программа SSH) — это программа для выполнения входа на удалённую машину и выполнения команд на этой удалённой машине.
- scp — программа для копирования файлов на удалённую машину с локальной, или в обратном направлении — с локальной на удалённую. При передаче данных используется зашифрованный канал.
- sftp — это тоже программа для передачи файлов по безопасному каналу. Эта программа похожа на ftp.
- ssh-keygen — утилита для создания ключей аутентификации и управления ими. Также она может использоваться для отзыва ключей.
Это основные программы, которые могут понадобиться большинству пользователей для создания ключей, подключения к удалённой машине и при удалённом копировании файлов.
Следующие утилиты присутствуют в пакете OpenSSH, но не требуют от пользователя явного запуска или применяются редко:
- ssh-add — добавляет приватный ключ к агенту аутентификации.
- ssh-agent — это программа для хранения закрытых ключей, используемая для аутентификации с открытым ключом (RSA, DSA, ECDSA, Ed25519). ssh-agent обычно запускается в начале сеанса X или сеанса входа в систему, а все другие окна или программы запускаются как клиенты для программы ssh-agent. Благодаря использованию переменных среды агент может быть найден и автоматически использован для аутентификации при входе на другие машины с использованием ssh.
- ssh-keyscan — это утилита для сбора открытых ключей хоста SSH с нескольких хостов. Она была разработана для помощи в создании и проверке файлов ssh_known_hosts. ssh-keyscan предоставляет минимальный интерфейс, подходящий для использования скриптами оболочки и perl.
- ssh-keysign — используется ssh для доступа к ключам локального хоста и генерирования цифровой подписи, необходимой во время аутентификации на основе хоста. ssh-keysign отключена по умолчанию и может быть включена только в глобальном файле конфигурации клиента /etc/ssh/ssh_config, если для EnableSSHKeysign установлено значение «yes». ssh-keysign предназначена не для вызова пользователем, а из ssh.
- ssh-copy-id — использует локально доступные ключи для авторизации на удаленном компьютере.
Установка openssh-server
К хосту можно подключиться по ssh если на нём установлен ssh сервер.
В Ubuntu стандартный вариант ssh сервера называется openssh-server
Установить его можно командой
sudo apt install -y openssh-server
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following additional packages will be installed:
ncurses-term openssh-sftp-server ssh-import-id
Suggested packages:
molly-guard monkeysphere ssh-askpass
The following NEW packages will be installed:
ncurses-term openssh-server openssh-sftp-server ssh-import-id
0 upgraded, 4 newly installed, 0 to remove and 2 not upgraded.
Need to get 688 kB of archives.
After this operation, 6 010 kB of additional disk space will be used.
Get:1 http://fi.archive.ubuntu.com/ubuntu focal/main amd64 ncurses-term all 6.2-0ubuntu2
Get:2 http://fi.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssh-sftp-server amd64 1:8.2p1-4ubuntu0.3
Get:3 http://fi.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssh-server amd64 1:8.2p1-4ubuntu0.3
Get:4 http://fi.archive.ubuntu.com/ubuntu focal/main amd64 ssh-import-id all 5.10-0ubuntu1
Fetched 688 kB in 2s (399 kB/s)
Preconfiguring packages …
Selecting previously unselected package ncurses-term.
(Reading database … 145758 files and directories currently installed.)
Preparing to unpack …/ncurses-term_6.2-0ubuntu2_all.deb …
Unpacking ncurses-term (6.2-0ubuntu2) …
Selecting previously unselected package openssh-sftp-server.
Preparing to unpack …/openssh-sftp-server_1%3a8.2p1-4ubuntu0.3_amd64.deb …
Unpacking openssh-sftp-server (1:8.2p1-4ubuntu0.3) …
Selecting previously unselected package openssh-server.
Preparing to unpack …/openssh-server_1%3a8.2p1-4ubuntu0.3_amd64.deb …
Unpacking openssh-server (1:8.2p1-4ubuntu0.3) …
Selecting previously unselected package ssh-import-id.
Preparing to unpack …/ssh-import-id_5.10-0ubuntu1_all.deb …
Unpacking ssh-import-id (5.10-0ubuntu1) …
Setting up openssh-sftp-server (1:8.2p1-4ubuntu0.3) …
Setting up openssh-server (1:8.2p1-4ubuntu0.3) …
Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time …
3072 SHA256:9++2jX5qWUOvh/GgxzZ45hX1jnictvNdKOBTy1zWXLI root@andrei-VirtualBox
(RSA)
Creating SSH2 ECDSA key; this may take some time …
256 SHA256:E0jgFvpa5eFuVVhjViXDsHjE1R0kY5GI86bB4WtaSLo root@andrei-VirtualBox (
ECDSA)
Creating SSH2 ED25519 key; this may take some time …
256 SHA256:zO8nJicXCUwGo74Usj3u5MZ41mCoRfpb0Jmn5q38Z4w root@andrei-VirtualBox (
ED25519)
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.serv
ice.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/
systemd/system/ssh.service.
rescue-ssh.target is a disabled or a static unit, not starting it.
Setting up ssh-import-id (5.10-0ubuntu1) …
Attempting to convert /etc/ssh/ssh_import_id
Setting up ncurses-term (6.2-0ubuntu2) …
Processing triggers for systemd (245.4-4ubuntu3.11) …
Processing triggers for man-db (2.9.1-1) …
Processing triggers for ufw (0.36-6) …
Как подключиться к SSH
Клиент SSH на Linux — это утилита командной строки, поэтому для ввода команд нужно открыть консоль. А пользователям Windows команды для подключения к SSH серверу нужно вводить в Cygwin.
Команда для подключения имеет следующий вид:
ssh АДРЕСАТ
Всё, что помещено в квадратные скобки, является необязательным. То есть в самом простом варианте команда для подключения может быть такой:
ssh АДРЕСАТ
В качестве АДРЕСАТа нужно указать IP к которому нужно подключиться или имя хоста. Поскольку пользователь не указан, то клиент SSH в качестве имени пользователя подставит имя пользователя в текущей сессии.
Типичная команда для подключения выглядит так:
ssh ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ
В качестве ПОЛЬЗОВАТЕЛя нужно указать имя пользователя на удалённой системе, к которой выполняется подключение. В процессе подключения для этого пользователя нужно будет подтвердить свою личность — с помощью пароля или ключа.
Если КОМАНДА не указана, то будет открыт обычный интерактивный шелл к удалённой системе. Если КОМАНДА указана, то при успешном подключении она будет выполнена, а интерактивный шелл открыт не будет, ssh завершит свою работу после выполнения команды.
Также можно указать URI следующего формата:
ssh ssh://hostname
Обратите внимание, что в предыдущей записи после двоеточия можно указать порт, для команды вида:
ssh hostname
нельзя указать порт после двоеточия — для этого используется опция -p.
При первом подключении SSH выведет информацию с запросом:
The authenticity of host ':55429 (:55429)' can't be established. ECDSA key fingerprint is SHA256:Yzxke9YEplA40/3EG8CV2IepRoEborTem6zpb0a7l0g. Are you sure you want to continue connecting (yes/no/)?
Первая строка сообщает нам, что программа не может установить соединение с этим хостом — но не надо спешить расстраиваться.
Во второй строке нам показывают уникальный отпечаток удалённого хоста и спрашивают, хотим ли мы к нему подключиться?
Набираем: yes
Далее появляется сообщение, что хост добавлен в список известных хостов:
Warning: Permanently added ':55429' (ECDSA) to the list of known hosts.
При последующих подключениях это сообщение показываться не будет.
Данная процедура — предупреждение о подключении к новым хостам — является надёжной защитой от спуфинга (подмены) IP адресов при подключении: если вы подключаетесь к одному и тому же хосту, то это сообщение больше не должно появляться. Если это сообщение появилось вновь, то это означает, что происходит подключение к какому-то другому хосту!
Чтобы закончить сессию (отключиться), наберите:
exit
Или нажмите Ctrl+D.
Управление службой OpenSSH
Клиент ssh запускается самим пользователем по мере необходимости.
Запуск службы OpenSSH требуется только на сервере.
Таким образом, если вы хотите воспользоваться первой моделью (демон SSH всегда активен), то для запуска службы и добавления её в автозагрузку наберите следующие команды:
sudo systemctl start sshd.service sudo systemctl enable sshd.service
Они добавят демона SSH в автозагрузку и запустят его прямо сейчас.
Для второй модели (запуск SSH только по требованию), сделайте так:
sudo systemctl start sshd.socket
sudo systemctl enable sshd.socket
Для проверки статуса службы:
systemctl status sshd.service
Либо если вы используете сокет:
systemctl status sshd.socket
Обратите внимание, что в разных дистрибутивах служба может называться ssh или sshd, следовательно, в приведённых выше и далее командах, используйте имена:
-
sshd.socket - sshd.service
Или:
-
ssh.socket - ssh.service
Алгоритм интерпретации
Очень важно понять, как SSH интерпретирует файл для применения значений, определенных внутри. Это имеет большие последствия при использовании подстановочных знаков и определения Host *
SSH будет искать совпадения по имени хоста, указанному в командной строке, с каждым из заголовков Host, которые определяют разделы конфигурации. Он будет начинать анализ с верхней части страницы, поэтому порядок разделов невероятно важен.
Шаблоны в определении хоста не должны совпадать с фактическим хостом, с помощью которого вы будете подключаться. Вы можете использовать эти определения для настройки псевдонимов хостов, которые могут использоваться вместо фактического имени хоста.
Например:
Host develHostName devel.example.comUser tom
Этот хост позволяет подключиться как [email protected], введя в командной строке:
ssh devel
Имея это в виду, мы можем обсудить, как SSH применяет каждый параметр конфигурации, когда он перемещается вниз по файлу. Он начинает анализ с начала файла и проверяет каждое определение хоста, чтобы узнать, соответствует ли оно значению, указанному в командной строке.
Когда SSH находит первое совпадение с определением хоста, каждый из связанных с ним параметров применяется к новому соединению. Однако интерпретация на этом не заканчивается.
Затем SSH перемещается вниз по файлу, проверяя, совпадает ли хост с другими определениями хоста. Если найдено другое определение, которое отвечает текущему имени хоста в командной строке, SSH рассмотрит параметры, связанные с новым разделом. Затем он будет применять все параметры SSH, определенные в новом разделе, которых не было в предыдущих разделах.
Этот последний момент чрезвычайно важен. SSH будет по порядку интерпретировать каждый из разделов Host, который отвечает имени хоста в командной строке. Во время этого процесса он всегда будет использовать первое значение, указанное для каждой опции. Переопределить значение, которое уже было предоставлено в каком-либо предыдущем разделе, невозможно.
Это означает, что ваш конфигурационный файл должен следовать простому правилу: наиболее конкретные конфигурации должны находиться вверху файла. Более общие определения могут появиться позже (это позволяет применить опции, которые не были определены предыдущими разделами).
Давайте снова посмотрим на конфигурационный файл config, который мы использовали в последнем разделе:
Host firsthostSSH_OPTION_1 custom_valueSSH_OPTION_2 custom_valueSSH_OPTION_3 custom_valueHost secondhostANOTHER_OPTION custom_valueHost *hostANOTHER_OPTION custom_valueHost *CHANGE_DEFAULT custom_value
Здесь первые два раздела определяются буквальными именами хостов (или псевдонимами), что означает, что они не используют никаких подстановочных знаков. Если создать подключение с помощью ssh firsthost, то сначала будет применен первый раздел. Для этого соединения будут установлены опции SSH_OPTION_1, SSH_OPTION_2 и SSH_OPTION_3.
SSH проверит второй раздел и обнаружит, что он не соответствует, после чего продолжит читать файл. Затем он найдет третий раздел и увидит в нем соответствия. Он проверит ANOTHER_OPTION, чтобы узнать, было ли это значение установлено в предыдущих разделах. Выяснив, что это не так, он применит это значение. Последний раздел будет отвечать любому хосту, поскольку определение * соответствует каждому соединению. Так как у SSH нет значения для переопределения опции CHANGE_DEFAULT из других разделов, он возьмет значение из этого раздела. Затем с опциями, собранными в этом процессе, выполняется соединение.
Давайте попробуем теперь вызвать ssh secondhost из командной строки.
Опять же, интерпретация начнется в первом разделе. Поскольку этот раздел отвечает только соединению firsthost, SSH пропустит этот раздел. Он перейдет во второй раздел. Узнав, что этот раздел соответствует запросу, он соберет значение ANOTHER_OPTION для этого соединения.
Затем SSH просмотрит третье определение и обнаружит, что подстановочный знак также соответствует текущему соединению. Затем он проверит, есть ли уже значение ANOTHER_OPTION. Поскольку этот параметр был определен во втором разделе, который уже был прочитан, SSH сбросит значение из третьего раздела.
Затем SSH проверит четвертый раздел и применит параметры, которые не были определены в предыдущих соответствующих разделах. Затем он попытается создать подключение, используя полученные значения.
Базовые опции SSH
На данный момент мы обсудили некоторые основные параметры, необходимые для установления соединения:
HostName: фактическое имя хоста, которое должно использоваться для соединения. Оно заменяет любой псевдоним, определенный в заголовке Host. Этот параметр не требуется, если определение Host указывает валидное имя хоста для подключения.
User: имя пользователя, с помощью которого нужно создать подключение.
Port: порт, по которому работает удаленный демон SSH (эта опция нужна, только если удаленный экземпляр не работает по стандартному порту 22).
SSH поддерживает еще много полезных опций, которые нужно рассмотреть.
Определение ключей
Если вы используете SSH-ключи, эти параметры помогут вам управлять ключами для каждого хоста.
IdentityFile: Эта опция может использоваться для указания расположения ключа каждого хоста. Если ваши ключи находятся в местах по умолчанию, каждый из них будет проверен автоматически. Если у вас есть несколько ключей, и все они используются для разных целей, эта опция укажет точный путь, где можно найти правильный ключ.IdentitiesOnly: Благодаря этой опции SSH будет полагаться только на тождества, предоставленные в файле конфигурации. Она может быть необходима, если у агента SSH в памяти есть альтернативные ключи, которые недействительны для данного хоста.
Эти параметры особенно полезны, если вам нужно отслеживать большое количество ключей разных хостов и использовать один или несколько агентов SSH.
Общие опции подключений
Вот несколько широко применяемых опций (чаще всего они используются в разделе Host *).
ServerAliveInterval: Этот параметр указывает SSH, когда отправлять пакет для проверки ответа от сервера. Это полезно, если ваше соединение ненадежно, и вы хотите узнать, доступен ли сервер.LogLevel: Настраивает уровень детализации, с которым SSH будет регистрироваться на стороне клиента. Это позволяет отключить регистрацию в определенных ситуациях или увеличить уровень детализации при отладке. Уровни по возрастанию детализации: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG1, DEBUG2 и DEBUG3.StrictHostKeyChecking: Этот параметр настраивает автоматическое добавление хостов в файл ~/.ssh/known_hosts. По умолчанию для этого параметра будет задано значение «ask», что означает, что он предупредит вас, если Host Key, полученный с удаленного сервера, не соответствует найденному в файле known_hostsfile. Если вы постоянно подключаетесь к большому числу эфемерных хостов, вы можете переключить его на «no». Тогда SSH автоматически добавит в файл все хосты. Это может иметь последствия для безопасности, поэтому тщательно подумайте, прежде чем включать этот параметр.UserKnownHostsFile: Этот параметр указывает расположение, в котором SSH будет хранить информацию о том, к каким хостам он подключился. Обычно этот параметр не используется, но вы можете установить его в /dev/null, если вы отключили проверку хоста.VisualHostKey: Этот параметр позволяет SSH отображать ASCII-представление ключа удаленного хоста при подключении. Включив его, вы получите простой способ узнать ключ вашего хоста, что позволит вам легко распознать его, если вам понадобится подключиться с другого компьютера в будущем.Compression: Этот параметр полезен при создании очень медленных соединений. Он используется очень редко.
Учитывая перечисленные выше элементы, можно внести в конфигурации несколько полезных настроек.
Например, если вы очень быстро создаете и удаляете хосты у провайдера облачных вычислений, вам может пригодиться такой раздел:
Host homeVisualHostKey yesHost cloud*StrictHostKeyChecking noUserKnownHostsFile /dev/nullLogLevel QUIETHost *StrictHostKeyChecking askUserKnownHostsFile ~/.ssh/known_hostsLogLevel INFOServerAliveInterval 120
Это включит визуальный ключ хоста для домашнего подключения, что позволит вам ознакомиться с ним, чтобы вы могли узнать, меняется ли он или при подключении с другого компьютера. Также любой хост, который начинается с cloud*, не будет проверять хосты и регистрировать ошибки в логах.
Как проверить журнал событий SSH службы
События SSH можно разделить на события:
- запуска и остановки этой службы
- события, связанные с подключением пользователей
Просмотреть логи SSH можно различными способами, один из вариантов (помните, что в некоторых системах служба называется ssh.service, без буквы d):
journalctl -u sshd.service
Например, для вывода последних 100 записей:
journalctl -u sshd.service | tail -n 100
Также можно просмотреть события SSH с помощью:
journalctl -u "sshd@*"
или с:
journalctl /usr/bin/sshd
Универсальная команда в независимости от имени службы:
journalctl -u "ssh*"
Для вывода событий, связанных с подключением пользователей, другой информации, в том числе отладочной (зависит от настройки уровня подробности сообщений), можно посмотреть следующим образом:
journalctl | grep -i ssh
Как настроить VNC через ssh
По своей природе VNC — это не безопасный протокол. Хорошо известнен риск безопасности VNC: соединение с сервером VNC осуществляет по сети через не зашифрованный канал. Т.е. кто угодно может стащить установленную VNC сессию. Для защиты от VNC сниффинга, вам следует попробовать дополнительные внеполосные механизмы шифрования, под или над соединением VNC.
Один из таких механизмов — это настройка VNC сессии через SSH туннель. В этом уроке я опишу как настроить VNC через SSH на Linux.
Я предполагаю, что у вас уже есть где-то в сети VNC сервер, к которому мы будем коннектится.
Чтобы создать SSH туннель к удалённому хосту, где запущен VNC сервер, удалённый хост должен также иметь запущенный SSH. Поэтому для начала установите сервер OpenSSH на удалённый хости (как это сделать рассказано в первой части).
Следующий шаг — это создание SSH туннеля с локального хоста на удалённый хост. Чтобы это сделать, запустите следующую команду. Здесь 5900 — это номер порта, который прослушивает удалённый VNC сервер.
ssh user@remote_host -L 5900:127.0.0.1:5900
После введение SSH пароля и успешного входа, будет установлен SSH туннель между 127.0.0.1:5900 и remote_host:5900.
Теперь вы можете продолжать и запустить клиент VNC на локальном хосте. В вашем VNC клиенте соединитесь к 127.0.0.1:5900 вместо удалённого VNC сервера. Тогда трафик VNC будет перенаправляться через SSH туннель между вами и удалённым сервером VNC и, следовательно, он будет обезопасен от перехвата пакетов.
gvncviewer 127.0.0.1
Передача стандартного вывода с локальной машины на удалённую по ssh
Не менее интересный вариант выполнения команд будет приведён немного ниже:
cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
Команда cat построчно считывает и отображает содержимое файла .ssh/id_rsa.pub, расположенного на локальной машине.
| (труба) передаёт то, что должно было бы появиться в стандартном выводе, другой команде.
Вместо команды, которая должна была бы обрабатывать передаваемые ей строки, происходит соединение к удалённой системе (ssh [email protected]).
На удалённую систему приходят строки, для которых предусмотрена команда cat >> .ssh/authorized_keys. Т.е. содержимое стандартного вывода построчно записывается в файл .ssh/authorized_keys, находящийся на удалённой машине.