This page is hosted for free by zzz.com.ua, if you are owner of this page, you can remove this message and gain access to many additional features by upgrading your hosting to PRO or VIP for just 32.50 UAH.

Терминалы - X2Go

Не работает? Начинай читать инструкцию.

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 с терминальным сервером без ввода пароля и настроек клиента.

Предлагаю ознакомиться с предложениями моих партнёров