Один из наших ssh-серверов действует как jumphost. Предполагается, что пользователи переходят только на определенные целевые хосты. Это можно сделать с помощью iptables , но на данный момент это не желаемое решение.
Я проверил man ssh_config
, чтобы узнать, можно ли настроить этот сценарий в общесистемном ssh_config
, но не нашел подсказок.
Есть какие-нибудь идеи помимо iptables для достижения этой цели?
Вы можете использовать что-то вроде этого
#! /bin/sh
MSG='********************************
1 = host1
2 = anotherhost
3 = host3
0 = exit
********************************'
host=none
while test none = "$host"
do
echo "$MSG"
echo -n 'your choice: '
read choice
case "$choice" in
1) host=host1.domain.com;;
2) host=anotherhost.xy.de;;
3) host=just.go.here;;
0) exit;;
esac
done
ssh $host
в качестве оболочки входа для ваших пользователей ssh на jumphost. Если вы сохраните его как / usr / bin / ssh-choice, не забудьте добавить / usr / bin / ssh-choice в / etc / shells.
TomTomTom
Удалите все, кроме jumphost, из таблицы маршрутизации хоста или установите брандмауэр, который предотвращает соединения где-нибудь, кроме самого хоста.
Добавьте действительный маршрут к вашим целям и более общий маршрут к нулю. Тогда пользователям будут доступны только определенные маршруты к вашим целям. Проблема в том, что это доступно для всех пользователей
Я не уверен в настройке, но, возможно, отключение входа в оболочку на хосте перехода и разрешение перенаправления портов на определенные хосты только для определенных пользователей, а затем использование опции -J (ProxyJump) openssh может быть решением здесь? Здесь может помочь директива Match файла sshd_config.
Ответ на предыдущий комментарий:
Если вам нужен доступ к оболочке, вам, вероятно, понадобится неизменный и пустой .ssh / config в домашних каталогах пользователей, все разрешенные хосты, перечисленные в / etc / ssh / ssh_config и перехватить всю директиву Host, которая перенаправляет на всегда терпящую неудачу ProxyCommand (которая также может выводить коучинговое сообщение на stderr, чтобы пользователь мог его видеть).
Что-то вроде строк:
Host host1 host1.example.com
<whatever directives may be needed here if any>
Host host2 host2.example.net
<whatever directives may be needed here if any>
Host *
ProxyCommand /bin/false