Skip to content

Commit 855c24c

Browse files
author
Plus
authored
Merge pull request #2 from sor88/windows_ver0.1
ver 1.0
2 parents ffd49a9 + 696714d commit 855c24c

File tree

11 files changed

+2017
-244
lines changed

11 files changed

+2017
-244
lines changed

README.md

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,50 @@
1-
Приложение для подключение к компьютерам локальной сети снаружи через ssh тоннель организации
1+
# Приложение для подключение к компьютерам локальной сети через ssh по RDP.
2+
3+
Используются библиотеки sshtunnel, PyQt5, threading и api Kerio Control скаченный с официального сайта.
4+
5+
Схема настройка серверной части:
6+
Сервер SSH с белым IP, с ограниченным пользователем с параметром nologin, авторизацией по паролю или ключу. Kerio в качестве сервер шлюза с настройкой пользователей MS Active Directory и привязкой по MAC или IP для каждого пользователя.
7+
В качестве логина выступает фамилия. Либо поле формы ввода фамилии можно изменить на Логин.
8+
В качестве сервиса получения ip может выступать любая БД или сетевые сервисы. Если проект будет востребован функционал будет реализован.
9+
10+
#### Принцип работы:
11+
12+
Приложение подключается по **ssh** к серверу и пробрасывает порт 2222 и делает проброс порта на api керио 4081. Подключается к api и делает запрос на поиск активного сетевого хоста по заданному имени. В качестве имени передается фамилия введенная в форме приложения. Далее ищется ip среди активных пк локальной сети. Если ip не найден происходит выход. Если ip найден происходит переподлючение ssh сессии с пробросом порта на найденный ip и порт RDP.
13+
Далее стартует функция внесения учетных данных cmdkey для внесение данных в диспетчер учетных записей активного пользователя Windows.
14+
Последним шагом инициируется новый процесс mstsc с передачей параметра адреса подключения localhost. Учетные данне для подключения при этом берутся из диспетчера учетных данных текущего пользователя Windows. Сразу после подключения инициируется запуск очистки учетных данных в диспетчере учетных данных windows от внесенных ранее туда учетных данных.
15+
16+
Настройка перед компиляцией в exe:
17+
Основной файл запуска программы remotecli.py
18+
Файл дизайна для python desing.py
19+
Файл графических ресурсов res.py
20+
Основной файл настройки подключения sshconnect.py
21+
```
22+
publicipadress = ('REMOTE_PUBLIC_IP', 3232) # настройка ip адреса подключения к ssh серверу.
23+
def sshtunconnect (address):
24+
ssh_username="LOGIN_SSH", # логин для подключения к ssh серверу
25+
ssh_password="PASSWORD_SSH", # пароль для подключения к ssh серверу
26+
ssh_pkey="srv.key", # файл ключа для подключения к ssh серверу
27+
local_bind_address=('localhost', 2222) # адрес и порт откуда происходит проброс
28+
29+
def sshtungetip():
30+
remote_bind_address=('IP_Kerio_FIREWALL', 4081), # ip адрес и порт kerio control
31+
32+
def rdpdataconnection():
33+
subprocess.call(f"cmdkey /add:localhost /user:DOMAINMAIN\{login} /pass:{password}") # Если пользователи не доменные DOMAIN\ убрать
34+
```
35+
Файл kerio/kerio.py
36+
```
37+
username = "kerio_admin_read_access_login" логин от kerio control, достаточно ограниченной учетной записи с правами только для чтения
38+
password = "kerio_admin_read_admin_pass" пароль от kerio control
39+
```
40+
Планы:
41+
42+
:black_square_button: Делать или не делать вот в чем вопрос?
43+
44+
1. Реализация раздела настройки.
45+
46+
2. Реализация ручного указания ip на в настройках приложения.
47+
48+
3. Реализация получения ip из БД, с предварительно занесенных туда пользователей (клиент - серверная версия) через веб интерфейс.
49+
50+
....

desing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010

1111
from PyQt5 import QtCore, QtGui, QtWidgets
12-
12+
import res
1313

1414
class Ui_MainWindow(object):
1515
def setupUi(self, MainWindow):
@@ -34,7 +34,7 @@ def setupUi(self, MainWindow):
3434
self.label_3.setStyleSheet("width: 100%\n"
3535
"")
3636
self.label_3.setText("")
37-
self.label_3.setPixmap(QtGui.QPixmap("image/89.png"))
37+
self.label_3.setPixmap(QtGui.QPixmap(":/image/89.png"))
3838
self.label_3.setObjectName("label_3")
3939
self.label_4 = QtWidgets.QLabel(self.centralwidget)
4040
self.label_4.setGeometry(QtCore.QRect(140, 40, 161, 18))
File renamed without changes.

dist/beta_0.1.exe

-33.9 MB
Binary file not shown.

kerio/kerio.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
""" Hostname or ip address of your Kerio Control instance with protocol, port and credentials """
1414
ipserver = "127.0.0.1"
1515
server = "https://"+ipserver+":4081"
16-
username = "pl"
17-
password = "xtvhfc,jk"
16+
username = "kerio_admin_read_access_login"
17+
password = "kerio_admin_read_admin_pass"
1818
ssl._create_default_https_context = ssl._create_unverified_context # Убирает ошибку сертификата SSL
1919

2020
def callMethod(method, params, token = None):

remotecli.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from PyQt5 import QtWidgets, uic
22
from desing import Ui_MainWindow
3+
from PyQt5.QtCore import QCoreApplication
34
import sys
45
import threading
56
import time
@@ -12,8 +13,8 @@ def __init__(self):
1213
self.ui = Ui_MainWindow()
1314
self.ui.setupUi(self)
1415
self.ui.pushButton.clicked.connect(self.connectionstart)
15-
self.ui.statusbar.showMessage("Программа готова для работы")
16-
self.ui.pushButton_2.clicked.connect(self.vihod)
16+
self.ui.statusbar.showMessage("Программа готова к работе")
17+
self.ui.pushButton_2.clicked.connect(QCoreApplication.instance().quit)
1718

1819

1920
def connectionstart(self):
@@ -33,33 +34,42 @@ def connectionstart(self):
3334
if sshconnect.password == '':
3435
sshconnect.setstatus = "emptypassword"
3536
return
36-
#tex = self.ui.lineEdit.text()
3737
print(sshconnect.login)
38-
self.ui.statusbar.showMessage("Подключение.Пожалуйста подождите...")
39-
sshconnect.connecting()
38+
self.ui.statusbar.showMessage("Подключение. Пожалуйста подождите...")
39+
tun1 = threading.Thread(target=sshconnect.connecttopc, daemon=True)
40+
tun1.start()
4041

4142
def writelabelstatus(self):
43+
"""
44+
Функция выполняется следит за состоянием выполнения кода и изменяет сообщения в статус баре. Работает в отдельном потоке ( не блокирует основной поток, и форму приложения ).
45+
"""
4246
import sshconnect
4347
while True:
4448
time.sleep(1)
4549
if sshconnect.setstatus == 'emptylogin':
46-
self.ui.statusbar.showMessage("Поле Фамилия не заполнено")
50+
self.ui.statusbar.showMessage("Поле: 'Фамилия' не заполнено")
51+
time.sleep(3)
52+
self.ui.statusbar.showMessage("Программа готова к работе")
4753
break
4854
if sshconnect.setstatus == 'emptypassword':
49-
self.ui.statusbar.showMessage("Поле пароль не заполнено")
55+
self.ui.statusbar.showMessage("Поле: 'Пароль' не заполнено")
56+
time.sleep(3)
57+
self.ui.statusbar.showMessage("Программа готова к работе")
5058
break
5159
if sshconnect.setstatus == "ip is found":
52-
self.ui.statusbar.showMessage('IP найден, выполняется проброс порта.')
60+
self.ui.statusbar.showMessage('IP найден. Выполняется подключение.')
61+
time.sleep(10)
62+
self.ui.statusbar.clearMessage()
63+
break
5364
if sshconnect.setstatus == "IP не найден":
5465
self.ui.statusbar.showMessage(sshconnect.setstatus)
5566
break
56-
67+
5768
def vihod(self):
5869
"""
5970
Выход
6071
"""
61-
self.ui.label_4.setText ("Выход")
62-
exit()
72+
sys.exit()
6373

6474
def update(self):
6575
"""
@@ -71,8 +81,4 @@ def update(self):
7181
app = QtWidgets.QApplication([])
7282
application = mywindow()
7383
application.show()
74-
75-
#win = uic.loadUi ("untitled.ui") # расположение вашего файла .ui
76-
77-
#win.show ()
7884
sys.exit (app.exec ())

remotecli.spec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ block_cipher = None
66
a = Analysis(['remotecli.py'],
77
pathex=['C:\\Users\\plus\\Desktop\\develop\\rdpoverssh'],
88
binaries=[],
9-
datas=[],
9+
datas=[('image', 'imgdata'), ('image/89.png', 'img'), ('image/89.ico', 'ico')],
1010
hiddenimports=[],
1111
hookspath=[],
1212
runtime_hooks=[],
@@ -30,4 +30,4 @@ exe = EXE(pyz,
3030
upx=True,
3131
upx_exclude=[],
3232
runtime_tmpdir=None,
33-
console=False )
33+
console=False , icon='image\\89.ico')

0 commit comments

Comments
 (0)