vnc через ssh

Аватар пользователя Serega86

Категория: 

Голый VNC не шифрует трафик, и оставлять его в таком виде не стоит.
Кроме того, если на Ваш IP выйдут боты из Китая и начнут стучатся по портам, даже если пароль установлен действительно качественный (учтите, что пароль на vnc сессию ограничен 8 символами) и его не взломают, попасть на сервер посредством VNC будет затруднительно, из-за постоянной ошибки на количество неверных попыток авторизации.

1. Установим ssh
# zypper in openssh

2. Настройка сервера ssh
- раскоментируем и выставим параметры
mcedit /etc/ssh/sshd_config
Port 22
Protocol 2
LoginGraceTime 2m
PermitRootLogin no
MaxAuthTries 3
MaxSessions 10
PermitEmptyPasswords no
AllowAgentForwarding yes
AllowTcpForwarding yes
X11Forwarding yes
X11UseLocalhost yes
AllowUsers lin ## добавляем пользователя lin которому буден разрешен вход по ssh

- создаем группу и пользователя которому разрешен вход по ssh
# groupadd remote
# useradd -G remote lin
задаем пароль пользователю lin
passwd lin

- Добавляем сервис ssh в автозагрузку
# systemctl enable sshd.service

- запускаем сервис ssh
# systemctl start sshd.service

проверяем запущен ли сервис ssh
# systemctl status sshd.service
должно показать
sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
Active: active (running)

- пробуем подключиться по ssh
# ssh lin@localhost
password:

3. устанавливаем vnc server
# zypper in tightvnc xorg-x11-Xvnc

4. Создаем группу для пользователя от которого будем запускать vnc сервер.
# groupadd vnc

5. Создаем пользователя и пароль от которого будем запускать vnc сервер.
# useradd -G vnc -s /sbin/false vnc
# passwd vnc

6. Переходим под пользователя vnc.
# su -vnc

7. Запускаем vnc сервер.
$ vncserver
Если это первый запуск vnc сервера, будет создан конфиг файл и запрошены некоторые параметры:
_$ vncserver
_You will require a password to access your desktops.
_Password:
_Verify:
_Would you like to enter a view-only password (y/n)? n
_xauth: file /home/vnc/.Xauthority does not exist
_New 'X' desktop is my.server:1
_Creating default startup script /home/vnc/.vnc/xstartup
_Starting applications specified in /home/vnc/.vnc/xstartup
_Log file is /home/vnc/.vnc/my.server:1.log
_по умолчанию порт vnc сервера будет 5901, порт каждого следующего дисплея будет увеличиваться на 1 (5902,5903,...).

8. Проверить запущен ли VNC сервер и на каком порту слушает можно следующей командой.
$ netstat -nltp
_Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
_tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 1054/Xtightvnc

9.Создание скрипта автостарта vnc сервера.
Сначала убьем запущенный дисплей :1 (если он запущен).
$ vncserver -kill :1
_Killing Xtightvnc process ID 3246
_:1 — какой дисплей нужно убить.

10. Для запуска KDE под vnc
$ mcedit /home/vnc/.vnc/xstartup
комментируем ##twm $
добавляем startkde &

11. создаем скрипт запуска
$ sudo nano /usr/local/bin/myvnc
Добавляем следующие строки в файл:
#!/bin/bash
PATH="$PATH:/usr/bin/"
DISPLAY="1"
DEPTH="16"
GEOMETRY="1024x768"
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

case "$1" in
start)
/usr/bin/vncserver ${OPTIONS}
;;

stop)
/usr/bin/vncserver -kill :${DISPLAY}
;;

restart)
$0 stop
$0 start
;;
esac
exit 0

если требуется — в скрипте можно изменить глубину цвета или разрешение экрана.

12. Делаем файл исполняемым.
$ sudo chmod +x /usr/local/bin/myvnc
использование созданного нами скрипта:
$ myvnc start ###запустить vnc сервер
$ myvnc stop ###остановить vnc сервер
$ myvnc restart ###перезапустить vnc сервер

13. Теперь нужно позаботиться о том, чтобы настроенный нами vnc стартовал после загрузки сервера. (
Для этого создаем файл по следующему пути.
$ sudo nano /lib/systemd/system/myvnc.service
Добавляем следующий текст в файл:
[Unit]
Description=MyVnc

[Service]
Type=forking
ExecStart=/usr/local/bin/myvnc start
ExecStop=/usr/local/bin/myvnc stop
ExecReload=/usr/local/bin/myvnc restart
User=vnc

[Install]
WantedBy=multi-user.target

14. Включаем юнит в автозагрузку при старте системы.
$ sudo systemctl enable myvnc.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myvnc.service to /lib/systemd/system/myvnc.service.

15. Смотрим статус созданного нами юнита.
$ sudo systemctl -l status myvnc.service
myvnc.service - MyVnc
Loaded: loaded (/lib/systemd/system/myvnc.service; enabled)
Active: inactive (dead)

16. Запускаем сервис myvnc
$ sudo systemctl start myvnc.service

проверяем запущен ли сервис ssh
$ sudo systemctl status myvnc.service
должно показать
myvnc.service - MyVnc
Loaded: loaded (/lib/systemd/system/myvnc.service; enabled)
Active: active (running)


Теперь о шифровании трафика vnc в ssh тунеле

17. Пускаем VNC поверх SSH:
$ sudo nano /usr/local/bin/myvnc
Изменяем строку:
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
на
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -localhost"

18. Теперь для подключения к серверу сначала нужно создать тунель.
Под *nix:
# ssh vnc@xxx.xxx.xxx.xxx -L 5901:localhost:5901
Теперь возможно подключение посредством vnc клиента, указав вместо IP удаленного сервера localhost и порт на котором слушает vnc-server.
# vncviewer localhost:5901

19. При использовании Windows и putty агента:
После запуска putty переходим Connection -> SSH -> Tunnels.
В поле Source Port вбиваем порт на котором слушает VNC сервер — 5901, в поле Destination вписываем — localhost:5901 и жмем кнопку Add.
Перходим Connection -> SSH -> X11 Ставим галку Enable X11 Forwarding
Теперь возвращаемся на вкладку Session вписываем IP сервера и порт 22 (тут же можно и сохранить конфигурацию подключения), жмем Open

отключаем вход пользователя vnc в систему yast- управление пользователями и группами - пользователь vnc (редкатировать) - подробности -оболочка входа- /bin/false - группа vnc

источник
https://sohabr.net/habr/post/273201/