Поиск по сайту:

Как управлять файлом конфигурации SSH в Windows и Linux


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

Определение SSH-соединения

Если файл ~/.ssh/config не существует, вы можете создать его сейчас. Как правило, этот файл находится в «скрытом» каталоге .ssh, скрытом только потому, что большинство операционных систем не отображают каталоги с префиксом .. Кроме того, этот каталог обычно находится в домашнем каталоге пользователя или в домашнем каталоге пользователя, работающего с ssh, отсюда и нотация ~, обозначающая домашний каталог.

Важно следить за разрешениями в папке .ssh. Большинство клиентов SSH хотят, чтобы файлы находились в режиме 600 в этой папке. При ссылке на эту папку из подсистемы Windows для Linux убедитесь, что chmod 600 ~\.ssh\*

Итак, как выглядит в этом файле простое SSH-соединение? Ниже приведен пример простой конфигурации.

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser

Как вы можете понять из приведенной выше конфигурации, это настолько просто, насколько это возможно. На самом деле вы можете опустить порт, так как это не является строго необходимым, поскольку 22 – это порт SSH по умолчанию. Определив это соединение, в командной строке мы можем просто сделать следующее.

ssh my-ssh-host

Соединение обычно требует ввода пароля, так как соединение SSH не должно быть незащищенным.

Открытые/закрытые ключи

Почти каждый учебник или руководство по настройке SSH обычно ссылается на открытые/закрытые ключи в тот или иной момент. Это предпочтительный способ настройки SSH-соединения. Вместо пароля, который можно взломать или угадать, необходимо получить файл ключа. В этом руководстве не рассматривается, как их создавать, поэтому давайте предположим, что набор уже существует и правильно настроен. Как мы сообщаем нашей конфигурации хоста, что нужно использовать этот файл?

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes

Здесь представлены две новые команды. Команды IdentityFile и IdentitiesOnly. Во-первых, нам нужно сообщить SSH, где находится файл ключа, в этом случае мы сохранили файл в каталоге .ssh (будьте осторожны с разрешениями). Во-вторых, мы определили тег с именем IdentitiesOnly. Это укажет SSH не проверять каждый файл идентификации в этой папке, а только тот, который определен. По умолчанию SSH просматривает и проверяет каждый файл идентификации, пока не найдет нужный. Часто это приводит к Слишком много ошибок аутентификации для пользователя myuser на целевом сервере, если имеется много удостоверений.

Сложные конфигурации

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

ФорвардАгент

Что делать, если у вас есть сценарий, в котором вы открыли SSH-соединение с целевым сервером, которому затем необходимо установить другое SSH-соединение со вторым сервером с этого исходного целевого сервера? Вы можете подумать, что вам нужно будет хранить те же ключи SSH на этом целевом сервере, чтобы сделать этот следующий переход. Существует команда с метким названием ForwardAgent, которая позволяет вам «пересылать» ваши локальные ключи на следующий сервер в прыжке, настроив пересылку ключей агента SSH.

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes
	ForwardAgent yes

ПроксиДжамп

Подобно ForwardAgent, часто требуется открыть вторичное SSH-соединение непосредственно через первую (или вторую) цель. Во многих случаях это происходит потому, что машина может быть защищена брандмауэром от общего Интернета, но иметь подключение к «переходному ящику», который затем позволяет открыть соединение на защищенном брандмауэром сервере. Начиная с SSH версии 7.3 и выше, команда ProxyJump позволяет нам легко это сделать.

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes
	ForwardAgent yes
	ProxyJump myuser@10.0.0.6:22,myuser2@10.0.0.7:10005

Как видно выше, здесь два сервера. Первоначально SSH-соединение будет установлено на 10.0.0.5, но затем немедленно откроется соединение с 10.0.0.6, после чего, наконец, откроется соединение с использованием другого пользователя и порта для 10.0.0.7.

Стоит отметить, что вам действительно следует убедиться, что ваш SSH-сервер заблокирован.

SSH-прокси-туннель

Что делать, если вам нужно настроить туннель SOCKSv5? Сделать это довольно просто с помощью конфигурационного файла. Здесь мы представляем три новые команды: DynamicForward, ControlMaster и ControlPath.

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes
	DynamicForward 8080
  ControlMaster auto
  ControlPath ~/.ssh/%r@%h:%p

Команда DynamicForward — это порт, который мы на самом деле ищем для прокси через наше SSH-соединение, например, порт 8080. Для ControlMaster задано значение auto, что означает, что если соединение существует, используйте его, а если нет, создайте новое. Наконец, ControlPath устанавливает местоположение фактического файла сокета. В данном случае используется формат именования %r@%h:%p, что соответствует myuser@10.0.0.5:22 в данном случае подключения.

Заключение

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