Jalankan perintah / skrip di Windows 10 dari jarak jauh dari mesin Linux

0

Tujuan saya adalah meluncurkan skrip Autohotkey sederhana di mesin Windows 10 dari host Ubuntu dalam jaringan pribadi yang sama. Setelah googling, saya menemukan winexe , yang kedengarannya seperti dapat melakukan apa yang saya inginkan, tetapi setelah banyak percobaan, saya gagal menghubungkannya ke Windows 10 ("Gagal membuka koneksi - NT_STATUS_CONNECTION_RESET", googling lebih lanjut tidak membantu). Sebagai solusi kedua, saya telah menginstal server SSH pada mesin Windows (Bitvise SSH Server). Sekarang saya bisa masuk dari Ubuntu melalui ssh ke Windows atau menjalankan perintah di mesin Windows:

$ ssh user@windowsmachine command

Ini berfungsi untuk perintah biasa seperti DIR, MKDIR, ... tetapi tidak berfungsi untuk skrip Autohotkey. E.g., dengan

$ ssh user@windowsmachine 'C:\path\to\script.ahk'

tidak ada yang terjadi pada mesin Windows (diluncurkan secara lokal, skrip pengujian ini hanya menampilkan kotak pesan ucapan). Upaya berikut juga tidak berhasil:

$ ssh user@windowsmachine '"C:\Program Files\AutoHotkey\AutoHotkey.exe" C:\path\to\script.ahk'
$ ssh user@windowsmachine 'cmd.exe /c C:\path\to\script.ahk'

PEMBARUAN: Triknya hampir berhasil. E.g., ia meluncurkan calc.exe:

$ ssh user@windowsmachine calc.exe

Tetapi jika saya meluncurkan notepad.exe atau aplikasi lain, saya melihatnya di taskmanager berjalan sebagai proses latar belakang, tanpa GUI. (Saya tidak tahu wjat begitu spesifik tentang calc. Exe sehingga berjalan normal). Saya juga berhasil memperbaiki masalah dengan winexe, tetapi situasinya benar-benar sama dengan ssh - kecuali calc.exe, semua aplikasi GUI diluncurkan sebagai proses latar belakang. Masalah ini dibahas sini . Jadi intinya adalah bahwa dibutuhkan upaya besar untuk menjalankan aplikasi GUI di Windows 10 dari host Linux. Jadi saya baru saja menulis aplikasi client-server kecil saya sendiri di Qt 5, yang mendengarkan port tertentu, dan menjalankan aplikasi / skrip yang sesuai ketika perintah yang ditentukan pengguna diterima dari host lain.

ThisGuy
sumber
Tidak yakin persis apa yang dilakukan skrip Anda, tetapi mungkinkah skrip uji pertama tidak berfungsi karena merupakan aplikasi grafis? Koneksi SSH Linux-linux harus terlebih dahulu menjalankan perintah "export display =: 0" untuk meluncurkan aplikasi gui dengan benar di layar jarak jauh
Blaine
Ya, skrip ahk berkaitan dengan grafik (pop up kotak pesan). Tetapi "export DISPLAY =: 0" tidak membantu.
ThisGuy
Untuk menjadi jelas: Saya ingin kotak pesan muncul di mesin windows, bukan di linux;)
ThisGuy
Ok, triknya bekerja tetapi sangat selektif. Tidak memiliki masalah untuk meluncurkan calc.exe
ThisGuy
menarik ... ya, perintah ekspor pada dasarnya berarti "jalankan shell ini di bawah tampilan mesin remote". Tidak dapat mengetahui mengapa itu tidak akan berfungsi dengan skrip ...
Blaine

Jawaban:

1

Windows menggunakan sesi untuk menampilkan aplikasi GUI kepada pengguna. Server ssh Anda mungkin adalah layanan windows yang dijalankan oleh pengguna SYSTEM di sesi 0, yang tanpa tampilan grafis. Dengan demikian, Anda tidak akan melihat GUI dari aplikasi yang Anda mulai.

Anda dapat memeriksa ini dengan Penjelajah Proses Sysinternals . Setelah memulainya (sebagai admin), klik kanan bilah kolom, klik "pilih kolom" dan tambahkan "Sesi", "Akses UI", "Nama Pengguna" dan "Tingkat Integritas". Informasi ini akan menunjukkan kepada Anda untuk setiap proses dalam konteks yang menjalankan aplikasi ("Sesi"), apakah itu menunjukkan jendela ("Akses UI"), di mana akun dieksekusi ("Nama Pengguna") dan dengan izin apa ( "Tingkat Integritas", berarti tinggi sebagai admin ).

Sekarang, jika Anda ingin menjalankan aplikasi dari server ssh Anda di sesi pengguna Anda, Anda dapat melakukannya dengan utilitas Sysinternals lain yang disebut PsExec : psexec -i <session number> -accepteula <application to execute>. Jika Anda ingin proses dijalankan dengan pengguna normal Anda, Anda juga dapat menggunakan parameter -u dan Anda dapat menghapus izin -l jika Anda menginginkannya. Periksa bantuan yang berjalan psexec -?.

Untuk mengetahui nomor sesi Anda, Anda juga dapat menjalankan perintah qwinsta. Dengan cara ini, Anda tidak memerlukan aplikasi GUI Process Explorer.

Misalnya, untuk menjalankan kalkulator, lakukan hal berikut: Dari sesi ssh, jalankan qwinsta, yang seharusnya memberi Anda sesuatu yang mirip dengan ini:

C:\>qwinsta
SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
services                                    0  Disc
console           john.doe                  1  Active

Jadi sesi Anda yang ingin Anda gunakan adalah 1 dalam contoh ini (mungkin berbeda untuk Anda). Kemudian jalankan psexec -i 1 -accepteula calc.exe. Kalkulator sekarang akan muncul di desktop Anda. (itu -accepteula mutlak diperlukan pada eksekusi pertama aplikasi. Tanpa ini, aplikasi akan menunjukkan kepada Anda perjanjian lisensi di jendela GUI, yang - tentu saja - tidak akan ditampilkan karena alasan yang disebutkan di atas. Pada panggilan selanjutnya Anda dapat mengabaikan parameter, karena setelah diterima, jendela GUI tidak akan muncul lagi)

Jika Anda awali autohotkey.exe perintah dengan psexec seperti yang dijelaskan di atas, saya berharap skrip bekerja, tetapi saya tidak dapat menguji sendiri karena saya tidak tahu aplikasi itu.

hanjo
sumber