Pull to refresh

Терминальный сервер для 1С с помощью vnc+ssh на основе fedora 8.

Reading time5 min
Views4K
На самом деле, это инструкция скорее для меня самого, чтобы когда потребуется настроить такую штуку в следующий раз, не рвать волосы на голове и не думать в очередной раз: «Надо было все записать, когда в прошлый раз делал»… Но может быть, кому-то еще пригодится… Я абсолютно не претендую на то, что это абсолютно правильное решение и что нужно делать именно так, более того, буду только рад объективной критике… Просто я так сделал и решил это записать…
Итак, в один прекрасный день передо мной была поставлена следующая задача:
необходимо, чтобы пользователи удаленного офиса могли подключаться к 1С в нашем офисе…


Имеем:
Сервер на fedora 8(скажу сразу, я приверженец OS производства RedHat) с иксами(на самом деле, иксы почти не используются вся работа в терминале + mc, но мне просто удобнее, когда на сервере есть иксы), который является шлюзом для локальной сети офиса(IPTables).
Клиенты в удаленном офисе: windows xp professional с выходом в интернет.

Итак, шаг 1: настройка ssh.

Первое, что надо сделать, установить пакет OpenSSH, что делается довольно просто
yum install openssh.
К сожалению, не могу привести логов всего этого, т.к. уже есть де-факто настроенная система, а эту заметку пишу уже постфактум) =)
После установки открываем /etc/ssh/sshd_config и начинаем его редактировать:
В нашем случае авторизация будет происходить с использованием PublicKey и никакие другие виды авторизации мы не приемлем. Основные параметры, которые необходимо указать:

1) Сетевые параметры: IP-адрес и порт, которые будет прослушивать OpenSSH. В моем случае, ssh будет слушать 22й порт на IP-адресе локальной сети и на внешнем IP.

Port 22
ListenAddress 192.168.0.1
ListenAddress xxx.xxx.xxx.xxx


2) Параметры ssh: версия протокола (1 или 2) и HostKeys. Мы будем использовать только протокол версии 2, поэтому указываем следующие настройки:

Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key


3) Параметры Аутентификации(различные параметры вроде времени или количества попыток аутентификации, я рассматривать не буду). Итак, необходимо запретить все виды аутентификации, кроме аутентификации с использованием открытого ключа. А также запрещаем аутентификацию для пользователя root.

PermitRootLogin no
RSAAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts yes
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication no
UsePAM no


4) Параметры туннелирования портов. В данном случае, мы не будем использовать X11 Forwarding, а просто будем использовать ssh в качестве туннеля для порта 5901, соответственно, параметры относящиеся к X11Forwarding можно не трогать, главное — включить туннелирование.

PermitTunnel yes


Остальные параметры я оставил по умолчанию.

Итак, сервер ssh почти настроен, осталось сделать всего пару вещей.
1) Создать пару ключей для нужного пользователя. Это делается с помощью команды ssh-keygen. Можно задавать большое количество различных опций, таких как длина ключа, тип ключа, имя хоста и др, но даже при использовании с опциями по умолчанию, если вам не нужна черезчур высокая безопасность, вы получите вполне безопасный ключ. Я генерировал ключ следующим образом:

ssh-keygen -t rsa

При генерации ключа необходимо будет ввести пароль, который будет использоваться для доступа к нему в дальнейшем. По умолчанию ключи id_rsa и id_rsa.pub будут сохранены в папку ~/.shh. Закрытую часть ключа(id_rsa) необходимо переместить на хост, с которого будет осуществляться удаленный доступ.

2) Скопировать ПУБЛИЧНУЮ часть созданного ключа в файл ~/.ssh/authorized_keys, например так:
cat id_rsa.pub >> authorized_keys

Все, настройка OpenSSH-сервера закончена, осталось его запустить:
/sbin/service sshd start
А заодно, чтобы в дальнейшем не запускать его вручную после перезагрузок:
chkconfig sshd on


После этого можно протестировать работу нашего сервера. Подключимся из локальной сети, используя Putty.

Сначала с помощью утилиты puttygen необходимо конвертировать наш секретный ключ в формат putty:
1) Запускаем puttygen.
2) Conversions-Import Key и указываем наш секретный ключ
3) После ввода пароля, откроется окно с параметрами ключа, где необходимо выбрать «Save private key» и сохранить версию ключа для putty.

После конвертирования ключа, запускаем putty, для подключения
В настройках необходимо указать:
1) На вкладке Session — IP-адрес сервера, к которому мы подключаемся и порт(в случае использования отличного от порта 22).


2) На вкладке SSH->Auth в поле «Private key file for authentication» указать путь к нашему ключу:


После чего, можно смело нажимать Open. И… вот он, удаленный доступ.



Шаг 2: Следующее, что нам необходимо будет настроить — это сервер vnc.

1) Установка(проще некуда):
yum install vncserver

Настройка, также на удивление проста:
2) Запуск vncpasswd и установка пароля для доступа к вашему терминальному серверу
3) Описание запускаемых серверов vnc в файле /etc/sysconfig/vncservers:
Для настройки терминального сервера необходимо указать пользователей, к рабочим столам которых будет происходить подклюдчение. В данном случае, мы настроили 2 терминальных сервера для доступа к десктопам пользователей user1 и user2. По умолчанию первый будет доступен на порту 5901, второй 5902. В строках VNCSERVERARGS задаем необходимые опции для каждого из серверов. В данном случае:
-geometry — разрешение экрана.
-nohttpd — отключаем запуск https-сервера, который vnc по умолчанию запускает. (В противном случае, можно будет подключиться к рабочсему столу, набрав в браузере server-name:590x)
-localhost — разрешаем подключение только с localhost, то есть удаленно получить доступ к рабочему столу будет нельзя(но т.к. мы будем сначала подключаться к серверу через ssh, то vnc будет воспринимать наше подключение, как локальное.)
VNCSERVERS:«1: user1 2: user2»
VNCSERVERARGS[1]:"-geometry 800x600 -nohttpd -localhost"
VNCSERVERARGS[2]:"-geometry 1280x1024 -nohttpd -localhost"


4) Запуск службы:
/sbin/service vncserver start
Ну и чтобы в дальнейшем запускалась при загрузке:
chkconfig vncserver on


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

1) Сначала необходимо настроить в putty туннелирование портов. Для этого необходимо на вкладке SSH->Tunnels указать номер локального порта и назначение, куда будет переадресовываться данный запрос. Указываем адрес 127.0.0.1, так как мы разрешили подключение к vnc только с localhost.


2) После этого можем подключаться, используя vnc-клиент Для Windows существует несколько различных vnc-клиентов. Лично я препочитаю TightVNC, на мой взгляд, оптимальный среди бесплатных vnc-клиентов.
В окне запуска vnc указываем VNC server: 127.0.0.1:x, где x-номер порта, к которому осуществляется подключение.



Vncserver запросит имя пользователя и пароль, который мы задали командой vncpasswd при настройке сервера.



Итак:



Для пущей секьюрности в IPTables порт 22 был открыт только для двух IP-адресов: администратора в локальной сети и IP удаленного офиса. Для тех, кто настраивал IPTables, думаю, ничего сложного в этом нет, да и одно правило в поле не воин. Но, если что:
iptables -a INPUT -p tcp --dport 22 -s xxx.xxx.xxx.xxx -j ACCEPT

Удаленный сервер настроен, осталось настроить 1С. Настройка достаточно подробно описана — http://ru.wikibooks.org/wiki/LOR-FAQ-Wine. Однако, в случае, если вы хотите использовать сетевую версию 1С обычный Wine не подойдет… Во всяком случае, мне не встречалось ни одного случая, чтобы это у кого-нибудь получилось. Поэтому проще всего потратить 2000 рублей(На сайте написано 1700, но на самом деле + НДС=2006) и купить WINE@Etersoft Network Lite Настраивается чрезвычайно просто, поэтому описывать не буду. Итоговый результат:

Tags:
Hubs:
+18
Comments16

Articles

Change theme settings