ændrük предложил обратное соединение для получения простого SSH-соединения с кем-то еще (для удаленной помощи). Для этого для приема соединения требуется дополнительный пользователь. Этот пользователь должен иметь возможность перенаправлять свой порт через сервер (сервер действует как прокси-сервер).
Как создать ограниченного пользователя, который может делать ничего, кроме описанного выше?
Новый пользователь не сможет:
выполнить команды оболочки, получить доступ к файлам или загрузить файлы на сервер, использовать сервер в качестве прокси-сервера (например, веб-прокси) для доступа к локальным службам, которые в противном случае не были общедоступны из-за брандмауэр убивает серверОбобщенный, как мне создать ограниченного пользователя SSH, который может подключаться только к SSH-серверу без привилегий, поэтому я могу подключиться через это соединение с его компьютером?
Я уверен, что есть много решений для этого, и многие более надежные, чем тот, который я предлагаю. Однако этого может быть достаточно для ваших нужд. Чтобы сделать это, я предполагаю, что пользователь может выполнить проверку подлинности на основе ssh (putty или любой unix ssh должен поддерживать это).
Добавить пользователя, как обычно ('adduser' или любой другой инструмент) Создайте пользователей .ssh dir и .ssh / authorized_keysyour_user $ sudo -Hu ssh_forwarder /bin/bash
ssh_forwarder $ cd ~
ssh_forwarder $ mkdir .ssh
ssh_forwarder $ ( umask 066 && cat > .ssh/authorized_keys ) <<EOF
no-agent-forwarding,no-X11-forwarding,command="read a; exit" ssh-rsa AAAB3NzaC1y....2cD/VN3NtHw== smoser@brickies
EOF
Добавьте пользователя, как обычно («adduser» или любой другой инструмент) [ ! d6] your_user $ sudo usermod --lock ssh_forwarder
Теперь единственный способ, которым пользователь может попасть в вашу систему, - это доступ к правильному ssh-ключу, и ssh будет запускать «/ bin / bash -c» читать «» для них, нет что они пытаются запустить. «read a» будет просто читать до новой строки, а затем оболочка выйдет, поэтому пользователю просто нужно нажать «enter», чтобы убить соединение.
Есть много других вещей, которые вы могли бы сделать в 'команда ='. См. [F6] и найдите команду «command» для получения дополнительной информации.
Если вам не нравится тот факт, что попадание в игру убивает соединение, вы можете использовать для записи «command =» что-то вроде следующего:
command="f=./.fifo.$$ && mkfifo $f && trap \"rm -f $f\" EXIT && read a <$f && echo $a; exit;"
Это просто создает временный fifo в домашнем каталоге пользователей, а затем пытается прочитать его. Ничто не будет писать в этот файл, так что это будет длиться бесконечно. Кроме того, если вы хотите принудительно прекратить это соединение, вы можете сделать что-то вроде:
your_user$ echo GOODBYE | sudo tee ~ssh_forwarder/.fifo.*
Это должно использовать очень мало ресурсов, и ничто не должно ошибиться в этом скрипте, который не закончится завершение оболочки.
sleep 1h; echo You have been here too long. Good bye.
Я не видел, как вы можете позволить удаленному пользователю (ssh -R), но ограничить (ssh -L). Возможно, можно использовать «разрешительный аппарат». Гуглинг не очень помог. Казалось бы, что-то вроде «no-port-forwarding, allowremoteopen = 10001» было бы полезно, чтобы разрешить ssh -R 6901:localhost:6901.
Это решение. Он может быть определенно улучшен, и любое открытие удаленных портов должно быть тщательно изучено. Если бы моя цель состояла в том, чтобы позволить моей бабушке подключиться к моей локальной сети, чтобы я мог использовать vnc для просмотра ее экрана, и доступ к этим ключам был ограничен ею, я лично чувствовал бы себя достаточно безопасным. Если это было для предприятия, потребуется более тщательное расследование. Одна вещь, о которой нужно знать, - ssh -N, вообще не запрашивает оболочку, поэтому код «command =» не выполняется.
Другие, возможно, более безопасные механизмы могут включать создание настраиваемой оболочки для пользователя и даже блокировки с помощью apparmour.