Я уверен, что есть много решений для этого, и многие более надежные, чем тот, который я предлагаю. Однако этого может быть достаточно для ваших нужд. Чтобы сделать это, я предполагаю, что пользователь может выполнить проверку подлинности на основе 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.
Во-первых, когда выполняется minecraft, запустите
pgrep -a java
Теперь найдите что-то уникальное, возможно, это просто minecraft.
Вы получите свой pid, запустив [!d2 ]
pgrep -f minecraft
Во-первых, когда выполняется minecraft, запустите
pgrep -a java
Теперь найдите что-то уникальное, возможно, это просто minecraft.
Вы получите свой pid, запустив
pgrep -f minecraft
Во-первых, когда выполняется minecraft, запустите
pgrep -a java
Теперь найдите что-то уникальное, возможно, это просто minecraft.
Вы получите свой pid, запустив
pgrep -f minecraft
На самом деле лучший способ сделать это - записать PID в файл при запуске через скрипт оболочки. Затем вы можете отправить сигнал 0 на pid, чтобы увидеть, работает ли он в настоящий момент.
kill -0 $(cat /run/minecraft.pid)
Это вернет 0, если он запущен, & lt; 0, если это не так. [ ! d2]
В противном случае, если у вас нет контроля над запуском процесса, тогда поиск в основном будет выглядеть как davidbaumann.
На самом деле лучший способ сделать это - записать PID в файл при запуске через скрипт оболочки. Затем вы можете отправить сигнал 0 на pid, чтобы увидеть, работает ли он в настоящий момент.
kill -0 $(cat /run/minecraft.pid)
Это вернет 0, если он запущен, & lt; 0, если это не так. [ ! d2]
В противном случае, если у вас нет контроля над запуском процесса, тогда поиск в основном будет выглядеть как davidbaumann.
На самом деле лучший способ сделать это - записать PID в файл при запуске через скрипт оболочки. Затем вы можете отправить сигнал 0 на pid, чтобы увидеть, работает ли он в настоящий момент.
kill -0 $(cat /run/minecraft.pid)
Это вернет 0, если он запущен, & lt; 0, если это не так. [ ! d2]
В противном случае, если у вас нет контроля над запуском процесса, тогда поиск в основном будет выглядеть как davidbaumann.