Удаленный доступ на Ubuntu с Windows машины
В данной статье будет описано как организовать удаленный доступ к машине под Ubuntu с машины под Windows при этом будут использоваться такие утилиты как SSH, Putty, Tight VNC и Vino. Общий принцип работы: с компьютера под Windows создается защищенный SSH-туннель до Ubuntu и через него создается VNC-подключение (удаленный рабочий стол).
Статья делится на четыре части:
- Настройка SSH на Ubuntu
- Настройка Putty на Windows
- Настройка Удаленного доступа на Ubuntu
- Подключение с использование TightVNC
SSH
-
Установка и активация Secure Shell Server:
sudo apt-get install openssh-server service ssh status ssh start/running, process 2006
-
Проверка открытости
22
порта (порт, используемый по умолчанию SSH):netstat -tulpan | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:\* LISTEN -
SSH Tunnel
В Linux ля подключения по SSH с использованием локального проброса портов (local port forwarding) используется в общем виде следующая команда
ssh -C <ip-адрес_машины> -p <SSH-порт> -L <локальный_порт>:<адрес_машины>:<удаленный_порт> -l <пользователь>
Это означает, что любое соединение, исходящее из локального компьютера (localhost) через порт <локальный_порт>
будет перенаправлено по SSH-тунелю на <удаленный_порт>
удаленной машины.
Существует некоторая путаница относительно какие же IP указывать в <ip-адрес_машины>
и <адрес_машины>
. Если компьютер находится за роутером (NAT’ом) то <адрес_машины>
должен быть внутренним ip-адресом компьютера (например, 10.0.0.5), а в <ip-адрес_машины>
внешним ip-адресом роутера. Если компьютер подключается к Интернету напрямую, то адреса <ip-адрес_машины>
и <адрес_машины>
будут одинаковыми.
Подводя итог про туннелирование рассмотрим пример:
ssh -l myuserid -L 7777:work:22 gate
ssh -p 7777 localhost
Данная команда делает следующее: создается защищенное ssh-подключение к машине gate под пользователем myuserid
. Одновременно с этим начинается прослушивание на локальной (с которой осуществлялось подключение) машине на порту 7777
. Если организуется подключение на этот порт (опять изнутри самой локальной машины), то это соединение туннелируется в ssh-соединение, доходит до машины gate
и с нее осуществляется соединение на машину work
на 22
порт. После этого мы проверяем работу туннеля - подключаясь по ssh на локальный порт 7777
мы в итоге подключаемся к машине work (при учете что на ней настроен ssh сервер на порту 22).
Защита SSH
Усиленная защита при использовании SSH-туннеля достигается за счет того, что только один порт должен быть открыт наружу (SSH) и зашифрованное подключение будет идти только через этот порт.
-
На сервере проверяем присутствует ли папка
/home/<имя_пользователся>.ssh
и файл
/home/<имя_пользователся>/.ssh/authorized_keys
в ней
-
если нет, то создаем под пользователем
<имя_пользователся>
(как правило, это первый пользователь в системе или администратор)mkdir ~/.ssh cd ~/.ssh touch authorized_keys
-
Настраиваем ssh для большей безопасности. Файл настроек лежит по адресу
/etc/ssh/sshd_config
-
Делаем резервную копию
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
В общем случае следует изменить:
- TCP-порт прослушивания (по умолчанию 22):
Port <Порт_на_котором_SSH_будет_ждать_подключения>
- Отключить ненадежный старый протокол SSH ver.1:
Protocol 2
- Разрешить аутентификацию парой открытого/закрытого ключей:
PubkeyAuthentication yes
- Указывать, где смотреть на разрешенные публичные ключи:
AuthorizedKeysFile %h/.ssh/authorized_keys
- Отключить возможность аутентификации с помощью пароля (можно сделать и позже, после удачного первого соединения):
PasswordAuthentication no
Аутентификация с помощью ключа
Для большей безопасности следует настроить на аутентификацию SSH с помощью открытого ключа. Разрешенные к подключению по ssh публичные ключи хранятся в файле
~/.ssh/authorized_keys
- Генерируем пару открытый/закрытый ключей на машине, с которой будем подключаться (будет описано далее) и копируем открытый ключ в этот файл.
- Особое внимание нужно обратить на форматирование – весь ключ должен быть размещен в одну строку и начинаться с
ssh-rsa
и доступ к файлу(-rw------- (600))
-
Настраиваем правильный доступ к файлу с ключами
chmod go-w $HOME $HOME/.ssh chmod 600 $HOME/.ssh/authorized_key chown $(whoami) $HOME/.ssh/authorized_keys
ИЛИ
В файле настроек
/etc/ssh/sshd_config
изменяемStrictModes no
Для применения настроек, внесенных в файл
/etc/ssh/sshd_config
, необходимо перезапустить демон sshd.sudo /etc/init.d/ssh restart
Putty
Перед тем как погрузиться в настройки Putty необходимо сделать несколько замечаний.
- Putty сохраняет настройки в профили.
- Для сохранения всех настроек в профиль нужно перейти в меню Session в графе Saved Session ввести имя профиля и нажать Save. Для того чтобы загрузить определенный профиль в Putty в том же меню нужно выбрать нужный профиль по имени и нажать Load.
-
Для автоматической загрузки определенного профиля при запуске Putty нужно создать ярлык на exe-файл и в строке Рабочая папка дописать после пути к exe файлу добавить
-load <имя_профиля>
Для улучшения безопасности будет использоваться:
- локальный проброс портов
- система с открытым ключом
В случае использования SSH-подключения для доступа по VNC (удаленному рабочему столу) необходимо настроить проброс портов, так называемый local port forwarding. Он используется для повышения безопасности, так как при использовании VNC данные передаются в открытом виде.
Для проброса портов в Putty переходим в меню Connection -> SSH -> Tunnels
и добавляем 5900
как Source port
, localhost:5900
в Destination
и нажимаем Add.
Для создания пары открытого/закрытого ключей можно использовать программу Puttygen. Скачиваем Puttygen.exe. В параметрах выбираем SSH-2 RSA, количество битов устанавливаем 2048 и нажимаем кнопку Generate.
Для дополнительной защиты можно дважды прописать passphrase
. Если есть необходимость при SSH-соединении сразу входить в консоль, то поле можно оставить пустым.
Далее нажать Save public key – для сохранения открытого ключа *.pub
и Save private key для сохранения закрытого ключа *.ppk
.
Открытый ключ сохраняется в понятном только Putty форматировании. Поэтому для установки его в Linux нужно сделать следующее:
- Пока puttygen еще открыта – скопировать публичный ключ в разделе
Public key for pasting…
И вставить в файлauthorized_keys
на сервере. - Указать Putty на файл закрытого ключа в меню
Connection -> SSH -> Auth
в разделеPrivate key file for authentication
сгенерированный файл*.ppk
.
Vino
- По умолчанию в Ubuntu уже включен VNC-сервер Vino. Для его настройки нужно перейти в
Menu -> System -> Preferences -> Remote Desktop
и включить удаленный доступ. В настройках можно включить аутентификацию по паролю, но нельзя настроить порт прослушивания (используется5900
). Для возможности более детальной настройки рекомендуется установить X11VNC.
TightVNC
-
Скачиваем TightVNC и устанавливаем. Для целей данной статьи достаточно выбрать только роль клиента.
-
Запускаем на Windows машине TightVNC и в поле вбиваем
localhost:5900