Заказать сайт недорого. Создание сайта на базе системы управления контентом. Индивидуальный подход при создании сайта. Современный и красивый дизайн сайта. Удобная навигация на сайте.

palexa.pp.ua@gmail.com

(+380) 66 531 77 01 ; 67 301 39 26

X2Go Client Windows - автоматическая вставка пароля (парольной фразы) при авторизации по ключу на терминальном сервере X2Go.

В этой статье, речь пойдёт о том, как автоматически подключиться к терминальному серверу, если для этого используется ключ и парольная фраза.

Многим пользователям очень лень постоянно вводить пароль, особенно если он сложный. А вот возможности запомнить пароль в X2Go Client Windows не предусмотрена.

Возможно кто то из Вас скажет, что ключ можно сделать без парольной фразы. Но думаю это не совсем правильный подход. В данной статье я приведу несколько примеров написания скрипта, который запустит X2Go Client Windows и вставит пароль сам.

Скрипт автоматической вставки пароля пишем на AutoIT  и компилируем его exe

Задача скрипта - запустить X2Go Client Windows, подключиться к серверу и автоматически вставить пароль (парольную фразу) = PaSSw0rd1234

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

1) Если сессия записана в клиенте:

Скрипт автоматической вставки пароля

Opt("TrayIconHide", 1)
Run ('"C:\Program Files\x2goclient\x2goclient.exe" --session=internet --no-menu --no-session-edit')

MouseMove(0,0,0)
BlockInput(1)

Opt("WinTitleMatchMode", 2)
WinWait("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
If Not WinActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "") Then WinActivate("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
WinWaitActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")

MouseMove(0,0,0)
BlockInput(1)

Send("{CAPSLOCK on}p{CAPSLOCK off}a{CAPSLOCK on}{s 2}{CAPSLOCK off}w0rd1234{ENTER}")

MouseMove(400,400)

2. Теперь рассмотрим вариант, когда сессию можно написать в отдельном файле и положить в укромном месте, в том числе и на сетевом ресурсе. (в настройках клиента будет пусто).

На пример выставить права на папки и файлы так:

для директории c:\seskey\ сделать полный доступ только администратору и системе (остальных исключить из списка полностью), лучше сделать скрытой
для директории \key\ и \ses\ добавить для обычных пользователей права (чтение, список содержимого папки),
*.* файлы в них доступны для чтения обычным пользователям

Файл сессии C:\seskey\ses\internet

[20151226123530987]
speed=4
name=internet
host=192.168.100.101
key=c:/seskey/key/mykeyx2go
sshport=22
rootless=true
command=runff.sh

Файл ключа C:\seskey\key\mykeyx2go

Скрипт автоматической вставки пароля

Opt("TrayIconHide", 1)
Run ('"C:\Program Files\x2goclient\x2goclient.exe" --session-conf=c:\seskey\ses\internet --session=internet --no-menu --no-session-edit')

MouseMove(0,0,0)
BlockInput(1)

Opt("WinTitleMatchMode", 2)
WinWait("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
If Not WinActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "") Then WinActivate("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
WinWaitActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")

MouseMove(0,0,0)
BlockInput(1)

Send("{CAPSLOCK on}p{CAPSLOCK off}a{CAPSLOCK on}{s 2}{CAPSLOCK off}w0rd1234{ENTER}")

MouseMove(400,400)

3. При подключении, папку с ключом временно можно копировать в директорию C:/seskey/temp/

Файл сессии C:\seskey\ses\internet

[20151226123530987]
speed=4
name=internet
host=192.168.100.101
key=C:/seskey/temp/key/mykeyx2go
sshport=22
rootless=true
command=runff.sh

Файл ключа C:\seskey\key\mykeyx2go

Скрипт автоматической вставки пароля

; прячем иконку из трея
Opt("TrayIconHide", 1)

; для директории c:\seskey\ сделать полный доступ только администратору и системе (остальных исключить из списка полностью), лучше сделать скрытой
; для директории \key\ и \ses\ добавить для обычных пользователей права (чтение, список содержимого папки), *.* файлы в них доступны для чтения обычным пользователям
; для директории \temp\ добавить для обычных пользователей права (полный доступ)

; временная папка для ключа
;Local $sDir = @UserProfileDir & "\temp" ;  (в корневой директории пользователя), но мне это не подходит, так как всегда придётся преписывать под пользователя файл сессии
Local $sDir = "C:\seskey\temp\key\"
; имя временного файла ключа
; Local $sDir1 = @UserProfileDir & "\temp\*.*"  ;  (в корневой директории пользователя), но мне это не подходит, так как всегда придётся преписывать под пользователя файл сессии
Local $sDir1 = "C:\seskey\temp\key\*.*"
; имя оригинальных файлов ключа и сессии
Local $sDir2 = "C:\seskey\key\*.*"
; запуск программы с ключами
Local $sDir3 = '"C:\Program Files\x2goclient\x2goclient.exe" --session-conf=c:\seskey\ses\internet --session=internet --no-menu --no-session-edit'
; запускаем программу
Run ($sDir3)
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; Изменяем метод сопоставления заголовков окон при операции поиска,
; 2 = Соответствие любой подстроке в заголовке
Opt("WinTitleMatchMode", 2)
; Приостанавливаем выполнение скрипта до появления указанного окна TITLE, с классом окна программы CLASS
WinWait("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; Проверяем, существует и активно ли указанное окно, активируем указанное окно (передаём ему фокус).
If Not WinActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "") Then WinActivate("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; Приостанавливаем выполнение скрипта до активизации указанного окна
WinWaitActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; создаём временную папку для ключа
DirCreate($sDir)
; копируем оригинальный файла ключа во временную папку
FileCopy($sDir2, $sDir)
; применяем атрибут скрытый к временной папке ключа и файлу ключа
If Not FileSetAttrib($sDir, "+H", 1) Then
EndIf
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; вводим парольную фразу и жмём ENTER
Send("{CAPSLOCK on}p{CAPSLOCK off}a{CAPSLOCK on}{s 2}{CAPSLOCK off}w0rd1234{ENTER}")
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; подождать 100 мс
Sleep (100)
; удаляем временный файл ключа
FileDelete($sDir1)
; удаляем временную папку для ключа
DirRemove($sDir, 1)
; переносим мышку в координаты 400,400, скорость по умолчанию
MouseMove(400,400)

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

4. При подключении, временно создаём папку с ключом в директории C:/seskey/temp/

Файл сессии C:\seskey\ses\internet

[20151226123530987]
speed=4
name=internet
host=192.168.100.101
key=C:/seskey/temp/key/mykeyx2go
sshport=22
rootless=true
command=runff.sh

Скрипт автоматической вставки пароля и создать файл ключа

; прячем иконку из трея
Opt("TrayIconHide", 1)

; для директории c:\seskey\ сделать полный доступ только администратору и системе (остальных исключить из списка полностью), лучше сделать скрытой
; для директории \ses\ добавить для обычных пользователей права (чтение, список содержимого папки), *.* файл в ней доступный для чтения обычным пользователям
; для директории \temp\ добавить для обычных пользователей права (полный доступ)

; временная папка для ключа
Local $sDir = "C:\seskey\temp\key\"
; имя временного файла ключа
Local $sDir1 = "C:\seskey\temp\key\mykeyx2go"
; запуск программы с ключами
Local $sDir3 = '"C:\Program Files\x2goclient\x2goclient.exe" --session-conf=c:\seskey\ses\internet --session=internet --no-menu --no-session-edit'
; запускаем программу
Run ($sDir3)
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; Изменяем метод сопоставления заголовков окон при операции поиска,
; 2 = Соответствие любой подстроке в заголовке
Opt("WinTitleMatchMode", 2)
; Приостанавливаем выполнение скрипта до появления указанного окна TITLE, с классом окна программы CLASS
WinWait("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; Проверяем, существует и активно ли указанное окно, активируем указанное окно (передаём ему фокус).
If Not WinActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "") Then WinActivate("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; Приостанавливаем выполнение скрипта до активизации указанного окна
WinWaitActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; переносим мышку в левый верхний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; создаём временную папку для ключа
DirCreate($sDir)
; Создаём файл и вписаваем в него ключ
; примеры
;FileWrite(@UserProfileDir & "\temp\mykeyx2go","-----BEGIN RSA PRIVATE KEY-----" & @CRLF)
;FileWrite("C:\seskey\temp\key\mykeyx2go","-----BEGIN RSA PRIVATE KEY-----" & @CRLF)
;FileWrite($sDir & "\mykeyx2go","-----BEGIN RSA PRIVATE KEY-----" & @CRLF)
FileWrite($sDir1,"-----BEGIN RSA PRIVATE KEY-----" & @CRLF)
FileWrite($sDir1,"Proc-Type: 4,ENCRYPTED" & @CRLF)
FileWrite($sDir1,"DEK-Info: DES-EDE3-CBC,057D2C3C374810CA" & @CRLF)
FileWrite($sDir1,"" & @CRLF)
FileWrite($sDir1,"LCbaJFRuEVUnFKrTGTeaaBu/LK5H9P/rRMsBlDdnwpxvVO9O1OEuf0kaMKbtjy39" & @CRLF)
FileWrite($sDir1,"dQTbKYXQX/W7GVb8htT3Kv1L/8/xdqQamlFX52e1q6s8TyUtvAKEe7/H+1QS6Pjw" & @CRLF)
FileWrite($sDir1,"obiLetdabVPmhiqH3Eg15SIvjtfQ4HGsf0SOfnMhiWGWPPtHLmv28BIduF36gGkd" & @CRLF)
FileWrite($sDir1,"c5yczxqeMxfxl09Pm0kGUVjLGJHgFPfeuPcyYnled3Ob8+SPOjnysdqsnPsKf+Ok" & @CRLF)
FileWrite($sDir1,"RRHb+xoKTw1DGkpIZuLXZNUuixuF9+2V9k0i8rriwz6NJPo+SoK+poqf510dZm6s" & @CRLF)
FileWrite($sDir1,"AmPRP8IuwIiQydu3P27PIV9/aL4nacJF3xcYvpBp6p9YRfwqWMo+4OSfhWZbZ+Vf" & @CRLF)
FileWrite($sDir1,"zpwgeRHzDD1qGJi7LirPuxtycvZpBe1wBHlsCN5LbaebOIby6pUrPA/9jX4aEiAw" & @CRLF)
FileWrite($sDir1,"EpTOlFGMnqbgS5385atZ3SUZ47vIJNzSId6jfPypRg/mZCZw+W10EaEsbah8L0hf" & @CRLF)
FileWrite($sDir1,"Y6QtAysHNQMO0f/EqAeMuG5i5HlzinaRMUKWWbwi3LX+zMo009V6LciJi3WoXtR3" & @CRLF)
FileWrite($sDir1,"fyICMGFl8YVnH2Q+/tRbJ8Z49gE97ioJ0bPr/cc8feefyzuiZ9j+FXi/vXO/hQSG" & @CRLF)
FileWrite($sDir1,"AVg0rKwaggOH/vgDipKUVnE5RVJKiXhQkeCYB17A6rvxNcbM3xccrofQtJ0/wDa7" & @CRLF)
FileWrite($sDir1,"Io8pTG6o/UivA1m7euBr/jc4wVrUeRhNKgjTLaKQ3m4mwFltXCSLGO+v+0mi716z" & @CRLF)
FileWrite($sDir1,"KRNt3uGZdxMAZ/VpFX89x4gGMlCi5n2WkKKjgUDs00E=" & @CRLF)
FileWrite($sDir1,"-----END RSA PRIVATE KEY-----" & @CRLF)
; применяем атрибут скрытый к временной папке ключа и файлу ключа
If Not FileSetAttrib($sDir, "+H", 1) Then
EndIf
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; вводим парольную фразу и жмём ENTER
Send("{CAPSLOCK on}p{CAPSLOCK off}a{CAPSLOCK on}{s 2}{CAPSLOCK off}w0rd1234{ENTER}")
; переносим мышку в левый верхний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; подождать 100 мс
Sleep (100)
; удаляем временный файл ключа
FileDelete($sDir1)
; удаляем временную папку для ключа
DirRemove($sDir, 1)
; переносим мышку в координаты 400,400, скорость по умолчанию
MouseMove(400,400)

Возможно у Вас возник вопрос: - зачем ключ копировать (создавать) во временную папку ?

Ответ: - потому что путь к ключу написан в файле сессии, который можно отследить и тем самым получить доступ к файлу с ключом. В данном случае получить доступ к временному файлу чуть сложнее. Но как это сделать, я Вам не скажу :)

Но если Вы решили создавать файл ключа из скрипта, то нет смысла хранить файл сессии, его тоже можно создать скриптом

5. При подключении, временно создаём папку с файлами ключа и сессии в директории C:/seskey/temp/

; прячем иконку из трея
Opt("TrayIconHide", 1)
; для директории c:\seskey\ сделать полный доступ только администратору и системе (остальных исключить из списка полностью), лучше сделать скрытой
; для директории \temp\ добавить для обычных пользователей права (полный доступ)
; временная папка
Local $Dir = "C:\seskey\temp\go\"
; ключ
Local $kDir = "C:\seskey\temp\go\mykeyx2go"
; сессия
Local $sDir = "C:\seskey\temp\go\internet"
; клиент
Local $xDir = '"C:\Program Files\x2goclient\x2goclient.exe" --session-conf=c:\seskey\temp\go\internet --session=internet --no-menu --no-session-edit'
; создаём папку
DirCreate($Dir)
; Создаём файл сессию
FileWriteLine($sDir,"[20151226123530987]")
FileWriteLine($sDir,"speed=4")
FileWriteLine($sDir,"name=internet")
FileWriteLine($sDir,"host=192.168.100.101")
FileWriteLine($sDir,"key=C:/seskey/temp/go/mykeyx2go")
FileWriteLine($sDir,"sshport=22")
FileWriteLine($sDir,"rootless=true")
FileWriteLine($sDir,"command=runff.sh")
; применяем атрибут скрытый к папке и файлу сессии
If Not FileSetAttrib($Dir, "+H", 1) Then
EndIf
; запускаем клиент
Run ($xDir)
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; Изменяем метод сопоставления заголовков окон при операции поиска, 2 = Соответствие любой подстроке в заголовке
Opt("WinTitleMatchMode", 2)
; Приостанавливаем выполнение скрипта до появления указанного окна TITLE, с классом окна программы CLASS
WinWait("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; Проверяем, существует и активно ли указанное окно, активируем указанное окно (передаём ему фокус).
If Not WinActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "") Then WinActivate("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; Приостанавливаем выполнение скрипта до активизации указанного окна
WinWaitActive("[TITLE:192.168.100.101:22; CLASS:QWidget]", "")
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; Создаём файл ключа
FileWriteLine($kDir,"-----BEGIN RSA PRIVATE KEY-----")
FileWriteLine($kDir,"Proc-Type: 4,ENCRYPTED")
FileWriteLine($kDir,"DEK-Info: DES-EDE3-CBC,057D2C3C374810CA")
FileWriteLine($kDir,"")
FileWriteLine($kDir,"LCbaJFRuEVUnFKrTGTeaaBu/LK5H9P/rRMsBlDdnwpxvVO9O1OEuf0kaMKbtjy39")
FileWriteLine($kDir,"dQTbKYXQX/W7GVb8htT3Kv1L/8/xdqQamlFX52e1q6s8TyUtvAKEe7/H+1QS6Pjw")
FileWriteLine($kDir,"obiLetdabVPmhiqH3Eg15SIvjtfQ4HGsf0SOfnMhiWGWPPtHLmv28BIduF36gGkd")
FileWriteLine($kDir,"c5yczxqeMxfxl09Pm0kGUVjLGJHgFPfeuPcyYnled3Ob8+SPOjnysdqsnPsKf+Ok")
FileWriteLine($kDir,"RRHb+xoKTw1DGkpIZuLXZNUuixuF9+2V9k0i8rriwz6NJPo+SoK+poqf510dZm6s")
FileWriteLine($kDir,"AmPRP8IuwIiQydu3P27PIV9/aL4nacJF3xcYvpBp6p9YRfwqWMo+4OSfhWZbZ+Vf")
FileWriteLine($kDir,"zpwgeRHzDD1qGJi7LirPuxtycvZpBe1wBHlsCN5LbaebOIby6pUrPA/9jX4aEiAw")
FileWriteLine($kDir,"EpTOlFGMnqbgS5385atZ3SUZ47vIJNzSId6jfPypRg/mZCZw+W10EaEsbah8L0hf")
FileWriteLine($kDir,"Y6QtAysHNQMO0f/EqAeMuG5i5HlzinaRMUKWWbwi3LX+zMo009V6LciJi3WoXtR3")
FileWriteLine($kDir,"fyICMGFl8YVnH2Q+/tRbJ8Z49gE97ioJ0bPr/cc8feefyzuiZ9j+FXi/vXO/hQSG")
FileWriteLine($kDir,"AVg0rKwaggOH/vgDipKUVnE5RVJKiXhQkeCYB17A6rvxNcbM3xccrofQtJ0/wDa7")
FileWriteLine($kDir,"Io8pTG6o/UivA1m7euBr/jc4wVrUeRhNKgjTLaKQ3m4mwFltXCSLGO+v+0mi716z")
FileWriteLine($kDir,"KRNt3uGZdxMAZ/VpFX89x4gGMlCi5n2WkKKjgUDs00E=")
FileWriteLine($kDir,"-----END RSA PRIVATE KEY-----")
; применяем атрибут скрытый к файлу ключа
FileSetAttrib($kDir, "+H")
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; вводим парольную фразу и жмём ENTER
Send("{CAPSLOCK on}p{CAPSLOCK off}a{CAPSLOCK on}{s 2}{CAPSLOCK off}w0rd1234{ENTER}")
; переносим мышку в левый верний угол мгновенно
MouseMove(0,0,0)
; блокируем мышку и клавиатуру
BlockInput(1)
; подождать 100 мс
Sleep (100)
; удаляем файл сессии
FileDelete($sDir)
; удаляем файл ключа
FileDelete($kDir)
; Создаём файл сессии
FileWriteLine($sDir,"[20151226123530987]")
FileWriteLine($sDir,"speed=4")
FileWriteLine($sDir,"rootless=true")
FileWriteLine($sDir,"command=runff.sh")
; применяем атрибут скрытый к файлу сессии
FileSetAttrib($sDir, "+H")
; переносим мышку в координаты 400,400, скорость по умолчанию
MouseMove(400,400)
; разблокируем мышку и клавиатуру
BlockInput(0)
; подождать 30 с (расчётное время соеинеия с сервером)
Sleep (30000)
; удаляем файл сессии
FileDelete($sDir)
; удаляем временную папку
DirRemove($Dir, 1)

Более удачный вариант скрипта, я написал в статье:

Автоматическая вставка пароля. Соединение X2Go Client с терминальным сервером без ввода пароля и настроек клиента.

Информация на сайте оказалась Вам полезной? Вы нашли ответ на вопрос?

Узнайте как поблагодарить меня

Добавить комментарий


Защитный код
Обновить