Поиск и замена текста с помощью sed

Итак, оказалось, что ответ на самом деле был намного, намного проще, чем я думал.

Тем не менее, я должен поблагодарить '@jeff schaller' за его комментарии, если бы не он, я бы не стал изучать, как работает конфигурация SSH 'Match'.

В любом случае

Хитрость заключается в том, чтобы установить файл конфигурации /etc/ssh/sshd _по умолчанию, чтобы он был конфигурацией, которую вы хотели бы иметь для доступа, поступающего из внешнего интернет-соединения.

В моем случае это означало установку следующего

PermitRootLogin no
PasswordAuthentication no
UsePAM no

Сделав это,Я заставляю ВСЕ входы в систему, независимо от того, откуда они происходят, использовать входы на основе ключей с использованием ключа SSH.

Затем на компьютерах с Windows я использовал «PuttyGen» для создания пары открытого и закрытого ключей, которую я сохранил на диск, и соответствующей записи ssh для моего файла «авторизованные _хосты» в домашнем каталоге внешних пользователей.

Я вставил этот ключ ssh в правильное место в домашней папке моих пользователей, затем настроил шпатлевку на использование частного (ppk )файла, сгенерированного PuttyGen, для входа в систему и сохранил профиль.

Затем я сохранил профиль и отправил его и файл ключа ppk внешнему пользователю безопасным способом. (Зашифрованное электронное письмо с вложенным защищенным паролем zip-файлом)

Как только пользователь получил ppk и профиль в своей копии шпатлевки и смог войти в систему, я добавил следующие две последние строки в мой файл конфигурации sshd _

Match Host server1,server1.internalnet.local,1.2.3.4
    PasswordAuthentication yes

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

Обратите внимание, что каждый домен сервера отделяется запятой и БЕЗ ПРОБЕЛОВ, это важно. Если вы поместите в него какие-либо пробелы, это приведет к тому, что SSHD не загрузит конфигурацию и сообщит об ошибке, 3 совпадения, которые у меня есть, делают следующее:

server1-соответствует всем, кто использует только «server1» без домена для подключения EG :«fred@server1»

server1.internalnet.local-соответствует любому, кто использует полное внутреннее доменное имя, например :'fred@server1.internalinternet.local' (ПРИМЕЧАНИЕ :для этого вам понадобится внутренний DNS работать правильно)

1.2.3.4-соответствует определенному IP-адресу. адрес, назначенный серверу SSH EG :'fred@1.2.3.4' здесь можно использовать подстановочные знаки или даже лучше в формате cidr сети/маски EG :1.2. Однако *или 192.168.1.0/8, если вы используете подстановочные знаки, прочитайте ответ fchurca ниже для некоторых важных примечаний.

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

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

однако прочтите это:

https://man.openbsd.org/OpenBSD-current/man5/ssh_config.5

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

После внесения изменений введите

sshd -T

с последующим возвратом, чтобы проверить их перед попыткой перезапустить сервер, он сообщит обо всех ваших ошибках.

Помимо всего вышеперечисленного, мне очень помогли следующие две ссылки:

https://raymii.org/s/tutorials/Limit_access_to_openssh_features_with_the_Match_keyword.html

https://www.cyberciti.biz/faq/match-address-sshd_config-allow-root-loginfrom-one_ip_address-on-linux-unix/

1
01.11.2020, 22:59
1 ответ

Ваш заменяющий текст содержит /, который sedобрабатывается как конец -выражения -, а затем сбой на следующем символе.

Либо измените разделитель с /на что-то, что не появляется ни в совпадении с образцом, ни в его замещающем тексте, либо экранируйте символ обратной косой чертой:

s/"Host"/"Europe\/London"/g
s#"Host"#"Europe/London"#g
3
18.03.2021, 22:53

Теги

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