У нас есть бастионный сервер B. Нам нужен SSH от A до B к C, используя закрытый ключ.
Какой вариант лучше?
Поместите закрытый ключ SSH на сервер B. Мы читаем, что это плохая идея в производственной среде.
От сюда :
Никогда не размещайте свои закрытые ключи SSH на экземпляре бастиона. Вместо этого используйте переадресацию агента SSH, чтобы сначала подключиться к бастиону, а оттуда - к другим экземплярам в частных подсетях. Это позволяет вам хранить ваш закрытый ключ SSH только на вашем компьютере.
Используйте переадресацию агента SSH . Для настройки переадресации агента мне нужно разрешить пересылку TCP. При настройке переадресации агента на хосте пересылки создается файл сокета, который представляет собой механизм, с помощью которого ключ может быть перенаправлен к месту назначения. В настройках Бастион на AWS:
Переадресация TCP: если для этого значения установлено значение true, включится пересылка TCP (туннелирование SSH) Это может быть очень полезно, но это также и угроза безопасности, поэтому мы рекомендуем оставить настройку по умолчанию (отключено), если это не требуется
Также отсюда :
Переадресация агента SSH считается вредной
Что лучше? Как насчет альтернативы из второй ссылки: ProxyCommand , я понимаю, что это помогает с проблемой файла сокета, но все же я думаю, что мне нужно включить пересылку TCP, так что это достаточно безопасно?
ssh hostb
команду, чтобы она могла искать hostb в локальной конфигурации и знать, что ей нужно подключиться через хосту. Это не могло бы сделать это, если вы поставили конфиг на хосте ...Ответы:
Используйте ProxyCommand или ProxyJump
Я бы порекомендовал использовать
ProxyCommand
(или даже лучше,ProxyJump
поскольку синтаксис проще, но требует openssh 7.3+, я думаю, на стороне клиента), и вам не нужно развертывать закрытый ключ на Bastion, все остается локальным.Пример с ProxyJump
На вашем клиентском компьютере вы пишете файл
~/.ssh/config
с таким же содержанием, как показано ниже:Затем выполнение
ssh srvC
соединит вас с C через B (бастион) без переадресации агента или развертывания закрытого ключа на бастион.В приведенном выше примере «bastion» - это псевдоним вашего хоста Bastion, а srvC - это псевдоним вашего сервера C. В этом случае
HostName
вам нужно указать либо IP-адреса, либо реальные полные доменные имена для ваших хостов. Для пользователей вам необходимо обновитьUser
правильное имя для входа на бастион и сервер C. Наконец,IdentityFile
это необязательно, если вы используете локальный агент (например, KeeAgent или ssh-agent), но если он не запущен, он также будет работать и попросить вас для каждой ключевой фразы.Развертывание открытых ключей
Конечно, вам нужно развернуть открытые ключи как для бастиона, так и для srvC. Вы можете использовать (знак $ только для иллюстрации приглашения, не вводите его):
Примечание: вышеуказанное будет работать, только если аутентификация по паролю все еще разрешена После вышеописанного развертывания и проверки того, что все работает как положено, вы должны запретить аутентификацию по паролю на 2 серверах.
Пример с ProxyCommand вместо ProxyJump
Если у вас более старая версия OpenSSH, которая не поддерживает
ProxyJump
(на стороне клиента), то замените:по
Насколько я понял, это похоже.
источник
Я видел ответ про ProxyJump. Давайте поговорим о ProxyCommand .
Но подожди, подожди! Я могу написать вам, как взломать сервер, который использует переадресацию агента, это будет намного легче понять разницу!
Давайте взломать!
Для основных шагов: вы можете прочитать мой пост здесь
Основные шаги следующие:
Как использовать AgentForwarding
-Создать конфиг в ~ / .ssh / config
-Добавьте свой ключ аутентификации в ssh-agent
-Соединиться с бастионом
-Подключение сервера приложений от бастиона
Взлом!
Вы можете задать мне вопрос:
Безопасен ли мой сервер? И ответ довольно прост:
Почему?
И в чем проблема?
Почему?
Как взломать серверы, если вы взломали бастионный хост?
Трек Цель
В каталоге / tmp вы можете увидеть что-то вроде этого:
Давайте откроем временный файл
Давайте посмотрим на соединения с этим идентификатором процесса.
результат:
а кто связан?
результат:
Мы также можем увидеть файлы сокетов:
результат:
А что происходит, когда клиент будет подключен к удаленному серверу? Давайте посмотрим:
Мы даже можем увидеть, используется ли файл сокета с помощью netstat:
Информация о краже сокета и IP-адрес
Теперь нам нужно , чтобы украсть информацию сокета во время сеанса бастиона хоста является открытым . О, нам также нужен IP-адрес сервера назначения , поэтому просто используйте netstat:
Последний шаг , чтобы использовать пересылаемый файл сокет
Проверьте, загружен ли ключ .
результат должен быть примерно таким :
Сервер взломан, как исправить проблему безопасности?
Команда прокси
Для основных операций: как передавать файлы через серверы (от клиента к серверу, от сервера к клиенту), вы можете прочитать в моем посте здесь
Заключение
Более подробную информацию смотрите в моем блоге . Кроме того, у меня есть несколько скриншотов, так что это может быть полезно для вас.
источник
channel 0: open failed: administratively prohibited: open failed. stdio forwarding failed.
. У тебя есть идея почему? В защищенном журнале я вижу:refused local port forward: originator 127.0.0.1 port 65535, target *app-ip* port 22
Просто используйте переадресацию агента SSH, как и большинство других.
Преимущество: на бастионе не хранятся ключи, которыми можно злоупотреблять.
Надеюсь, это поможет :)
источник