Удаленный доступ. Обобщил себе на память.

Часть 1. SSH. Подключение к удаленной машине (REMOTEHOST) с серым ip.

http://www.ietf.org/rfc/rfc1918.txt

 (192.168.*.*; 172.16.*.*-172.31.*.*; 10.*.*.*)

1. Необходим HOST1 с белым ip.
2. Настройки сервера HOST1 (sshd_config)

    |===================================|   
    | PermitRootLogin without-password  | Доступ root по ключам (если использовать ключи) 
    | PubkeyAuthentication yes          | Доступ по ключам (по умолчанию да)
    | PasswordAuthentication yes        | Доступ по паролю (по умолчанию да)
    | TCPKeepAlive yes                  | Проверка соеденения (по умолчанию да)
    | ClientAliveInterval 25            | Проверка через каждые 25с (по умолчанию 0)
    |===================================|

3. Настройка сервера REMOTEHOST (sshd_config)

    |===================================|   
    | PubkeyAuthentication yes          | Доступ по ключам (по умолчанию да)
    | PasswordAuthentication yes        | Доступ по паролю (по умолчанию да)
    |===================================|

4. На REMOTEHOST производим проброс порта (данную команду должен запустить локальный пользователь (remoteuser)):

    $ssh -f -N -R 2222:localhost:22 username1@HOST1

Вводим пароль для username1 (или используем ключи и не вводим пароль)
Здесь ssh подключается к HOST1 и передает ему на порт 2222 свой порт 22.
Опция -f оставляет процесс (клиент ssh) висеть в фоне.
username1 пользователь с HOST1.

5. На HOST1 запускаем клиента ssh:

    $ssh -p2222 remoteuser@localhost

Вводим пароль. remoteuser это имя пользователя на REMOTEHOST

Часть 2. Запуск x11vnc сервера и подключение к нему.

1. На REMOTEHOST производим проброс порта (данную команду запускаем удаленно или локально):

    $ssh -f -N -R 5900:localhost:5900 username1@HOST1

Вводим пароль для username1 (или используем ключи и не вводим пароль)
Пробросили еще один порт.
Здесь ssh подключается к HOST1 и передает ему на порт 5900 свой порт 5900.
Опция -f оставляет процесс (клиент ssh) висеть в фоне.
username1 пользователь с HOST1.

2. На REMOTEHOST выполняем:

$x11vnc

3. На HOST1 запускаем remmina (или любой клиент vnc)
Выбираем протокол vnc, пишем адрес: localhost и жмем Connect !

Часть 3. Администрирование REMOTEHOST с HOST2 по vnc, оба имеют серый ip.

1. Нужен транзитный сервер HOST1 с белым ip.

2. На REMOTEHOST производим проброс порта (данную команду должен запустить локальный пользователь (remoteuser)):

    $ssh -f -N -R 5900:localhost:5900 username1@HOST1

Вводим пароль для username1 (или используем ключи и не вводим пароль)
Здесь ssh подключается к HOST1 и передает ему на порт 5900 свой порт 5900.
Опция -f оставляет процесс (клиент ssh) висеть в фоне.
username1 пользователь с HOST1.

3. На REMOTEHOST запускаем x11vnc сервер.

4. На HOST2 производим проброс порта (данную команду должен запустить локальный пользователь (host2user)):

    $ssh -f -N -L 5900:localhost:5900 username1@HOST1

Вводим пароль для username1 (или используем ключи и не вводим пароль)
Здесь ssh подключается к HOST1 и подключает его порт 5900 на свой порт 5900.
Опция -f оставляет процесс (клиент ssh) висеть в фоне.
username1 пользователь с HOST1.

5. На HOST2 запускаем клиента vnc, например remmina. Пишем адрес: localhost и жмем Connect !

Неплохая памятка, однако есть ряд способов улучшить и автоматизировать эту работу:

Запуск VNC-сервера

В вашем случае запускать x11vnc необходимо вручную.
В корпоративном секторе бывает надо контролировать подчиненных без их ведома. Так что лучше запуск vnc-сервера доверить самому xorg
Для этого устанавливаем net-misc/tigervnc с USE="server xorgmodule"

echo net-misc/tigervnc server xorgmodule >>/etc/portage/package.use/custom
emerge -avt net-misc/tigervnc

После этого необходимо прописать в xorg.conf следующие строки

Section "Module"
  ...
  Load "vnc"
EndSection

Section "Screen"
  ...
  Option "localhost"
  Option "SecurityTypes" "None"
EndSection

детали по параметрам можно найти в мане:
$ man x0vncserver

Доступ по ssh

В данном случае у вас лишь косвенно упоминаются ключи
Между тем, аутентификаяия по ключам позволяет гибко раздать права доступа.
В том же корп. секторе, порою, необходимо начальнику отдела дать возможность смотреть что делают подчиненные, но не давать возможности что-либо самому выполнять на машинах починенных из под рута.

Можно, конечно, насоздавать бесправных аккаунтов для всех боссов, которым нужен доступ к экрану, и все это только для того, чтоб они смогли прокинуть себе один порт.

А можно (и как мне кажется правильнее) каждому боссу от мала до велика нагенерить ssh-ключи для доступа к vnc, и шаблонами (если машина в домене) прописывать необходимые ключи на нужные машины в следующем формате:
# cat /root/.ssh/authorized_keys

permitopen="127.0.0.1:5900",no-x11-forwarding,no-agent-forwarding,command="echo 'Just for VNCforwarding'" ssh-rsa BoDy/Of/PublicKey.......== MiddleManager03@vnc

Тут мы разрешаем форвардинг только порта 127.0.0.1:5900, и запрещам все остальное. Там можно указать еще много полезных параметров. Детали по ним можно найти в мане:
$ man 8 sshd@
@
И, само собой, запретить подключение по ssh всем кроме root-а, да и тому, лишь по ключам (само собой, надо иметь прописанным на этой машине в т.ч. и свой ключ)

echo PermitRootLogin without-password >> /etc/ssh/sshd_config
echo AllowUsers root >> /etc/ssh/sshd_config

Само собой, для того чтоб настройки применились необходимо перезагрузить соответствующие службы.

Подключение к клиенту

Ну и, само собой, не всякий “биг-босс” готов “опуститься до того, чтоб в консоли команды набирать”.
Благо, облегчить их труд может VNC (и много чего еще)-клиент Remmina (net-misc/remmina)
При создании подключения, в окне <<“Параметры удалённого рабочего стола”>> на вкладке <>, выставив галочки <<Включить туннель SSH>> и <<Туннель через loopback адрес>> можно избавить себя от необходимости подбирать свободный локальный порт, и ручного подключения к этому порту vnc-клиентом.
В описаном мною случае так же необходимо будет указать логин: root и приватный кюч для аутентификации.

Кроме всего прочего Remmina умеет подключаться по RDP NX и XDMCP (сразу скажу - лично я их не использовал уже очень давно, так что о работоспособности не могу ничего сказать), а так же группировать подключения в древовидные структуры

remmina_ssh.png

Прости, как вы вставили картинку, дайте мне пожалуйста совет по этому вопросу.