Настройка переключателя ssh-only

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

Мое первоначальное решение заключалось в том, чтобы написать простую оболочку в bash, которая выполняет ssh [myserver] и заставить пользователей запускать ssh username@aws-jumpbox [myserver] для подключения к myserver или, альтернативно, иметь интерактивный сеанс, который принимает только ssh как команду. Однако я с запозданием вспоминал, что вы не можете создавать интерактивный сеанс из сценария оболочки.

Есть ли простой способ добиться того, что я ищу? Я полностью иду по неверному пути?

  • Как я могу узнать, какой конкретный закрытый ключ используется для 1 ssh-соединения?
  • Запустить SSH через прокси-сервер SOCKS?
  • Увеличьте число, используя ssh
  • Не могу понять, почему ssh_exchange_identification: соединение закрыто удаленным хостом
  • ssh в домашней сети по имени хоста (динамический IP)
  • Как скопировать файлы с одной машины на другую с помощью ssh
  • Могу ли я подключиться к просмотренным сеансам ssh или просматривать их?
  • Как работает пересылка X11?
  • 3 Solutions collect form web for “Настройка переключателя ssh-only”

    Однако я с запозданием вспоминал, что вы не можете создавать интерактивный сеанс из сценария оболочки.

    Да, вы можете, но вам нужно передать -t команде ssh (той, которая устанавливает соединение с хостом перехода, а не с прыжком jost). Причина в том, что если вы укажете команду при запуске ssh , по умолчанию она не будет выделять tty, которая необходима для интерактивного сеанса. -t исправляет это.

    Возможные альтернативы:

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

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

    В общем, лично я не уверен, что то, что вы пытаетесь сделать, это хорошая идея. Ваш хост-переходник не решает проблему «слишком много ключей ssh», он только перемещает его и вводит множество проблем самостоятельно (без scp / sftp; вы добавляете хост, который является отличной целью для злоумышленника, пытающегося получить доступ ко всем хостам в вашей сети и, следовательно, SPOF, безопасно, проблема с интерактивными сеансами и заданными командами).

    Вместо этого я бы предложил следующее:

    • Используйте систему управления конфигурацией на хостах AWS и убедитесь, что она запускается при запуске до запуска sshd . Это хорошая идея в любом случае по разным причинам. Я знаю марионетку лучше, чем альтернативы, но есть и другие варианты.
    • если вы используете марионетку, создайте файл с вашими ssh-ключами пользователя, например:

       $user_wouter_sshkey = 'ssh public key data' $user_john_sshkey = 'ssh public key data' 

      И т.п.

    • Для каждой группы пользователей, которым вы хотите предоставить доступ к ресурсу, создайте определенный тип:

       define dbassh ($username = $title) { ssh_authorized_key {"wouter_dba_$username": key => $user_wouter_sshkey, type => 'ssh-rsa', user => $username, } ssh_authorized_key {"john_dba_$username": key => $user_john_sshkey, type => 'ssh-rsa', user => $username, } } 

      И т.п.

    • теперь, в другом месте вашего марионеточного конфига, вы можете делать такие вещи, как:

       user {"postgres": ensure => present, purge_ssh_keys => true, } dbassh {"postgres":} 

    То, что вы описываете, является единственной точкой отказа, и хрупкой. Лично я бы выбрал другой подход: две (или более) машины OpenBSD перед вашим кластером, выступая в роли маршрутизаторов, брандмауэров и балансировщиков. Синхронизировать состояния брандмауэра с CARP и использовать authpf для контроля, кто может получить доступ к чему. Таким образом, вы можете распространять ключи всех во всем мире и все же управлять доступом в одном месте. Он отделяет аутентификацию от авторизации и исключает единственную точку отказа.

    1) Установите SSH-безопасность на скачкообразном хосте. Только разрешить публичный IP-адрес вашего бизнеса или блок IP-адресов, которые предоставляет ваш интернет-провайдер, если у вас нет статических IP-адресов. Затем вы можете заставить пользователей, которые могут даже работать из дома в VPN, в свою внутреннюю сеть в первую очередь.

     https://www.freebsd.org/cgi/man.cgi?query=sshd_config&sektion=5 

    2) Блокировать SSH-логины на других серверах только из этого сервера-перехватчика.

     https://www.freebsd.org/cgi/man.cgi?query=sshd_config&sektion=5 

    3) Создайте функциональную учетную запись на серверах и нажмите SSH-ключ из этой учетной записи. Заблокируйте, используя ряд функций безопасности, таких как sudoers. MyCorporation …. mycorpsql, mycorpweb, mycorpdev, mycorpsys.

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

    http://sharadchhetri.com/2014/03/27/allow-only-members-of-wheel-group-to-use-su-command-on-rhelcentos/

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

    Удаление / завершение работы пользователей

     #!/bin/bash # title : deladminusers.sh # syntax : deladminusers.sh username gpasswd -d $1 youradmingrouphere userdel $1 

    Отключить пользователей

     #!/bin/bash # title : disableadminusers.sh # syntax : disableadminusers.sh username gpasswd -d $1 youradmingrouphere #makes password incomprehensible sed -i "s/$1:/$1:!/g" /etc/shadow 

    Чтобы включить пользователей

     #!/bin/bash # title : enableadminusers.sh # syntax : enableadminusers.sh username gpasswd --add $1 youradmingrouphere #makes password comprehensible again. sed -i "s/$1:!/$1:/g" /etc/shadow 

    4) Нажмите SSH-ключи на все серверы с помощью сканера-хоста. Затем заблокируйте файлы ssh в профилях функциональных учетных записей, чтобы они выполнялись только чтение-исполнение.

     fiduser@jumphost ~: ssh-keygen -t rsa fiduser@jumphost ~: for SERVER in `cat ~/serverlist` do ssh-copy-id -i .ssh/rsa_id.pub fiduser@$SERVER done 

    5) Пользователи Lock Down разрешили SU использовать функциональные идентификаторы и убедиться, что скачкообразный узел заблокирован. Отключите нормальный двоичный доступ на jumphost. Разрешить SU и SSH для ВСЕХ ПОЛЬЗОВАТЕЛЕЙ – Даже функциональные учетные записи на этом скачкообразном хосте, за исключением root. Сократите до минимальных требований к SSH без пароля после их входа в систему.

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

    Используйте некоторые меры борьбы с грубой силой. Может быть, fail2ban?

    Просто убедитесь, что он настроен не запрещать ваш бизнес IP-диапазон. Кроме того, не забудьте заблокировать свой внутренний узел Jump-host.

    Interesting Posts

    найти с -exec eval $ 0

    Как объединить два файла на основе соответствия двух столбцов? CSV

    Могу ли я настроить сенсорную панель в качестве клавиш-модификаторов в некоторых случаях?

    Как файловые менеджеры отделяют открытые программы?

    tar-эквивалент zip -o (-latest-time)?

    Эффективный способ развертывания настраиваемого ядра на нескольких хостах

    Выход для вывода с символами новой строки

    Как заставить бесконечно исполняющуюся команду убивать себя, когда выполняются определенные условия?

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

    Могу ли я установить лимит ресурсов для текущего дерева процессов?

    Bash tabcomplete имена файлов для значений переменных среды

    Trouble update-rc.d remove'ing dnsmasq на Debian Stretch

    Время вилки против поточной системы

    Как обнаружить ошибку с помощью замены процесса

    Подавлять файлы восстановления при редактировании конфиденциальных файлов в vi, nvi и vim

    Linux и Unix - лучшая ОС в мире.