เรียกใช้งานคำสั่ง / สคริปต์ใน Windows 10 จากระยะไกลจากเครื่อง Linux


0

เป้าหมายของฉันคือการเปิดตัวสคริปต์ AutoHotKey ง่ายๆในเครื่อง Windows 10 จากโฮสต์ Ubuntu ภายในเครือข่ายส่วนตัวเดียวกัน ฉันพบแล้ว winexe ซึ่งฟังดูเหมือนว่าจะทำสิ่งที่ฉันต้องการ แต่หลังจากการทดลองหลายครั้งฉันไม่สามารถเชื่อมต่อกับ Windows 10 ได้ ("ไม่สามารถเปิดการเชื่อมต่อ - NT_STATUS_CONNECTION_RESET" googling ต่อไปไม่ได้ช่วยอะไร) ในฐานะที่เป็นโซลูชั่นที่สองฉันได้ติดตั้งเซิร์ฟเวอร์ SSH บนเครื่อง Windows (Bitvise SSH Server) ตอนนี้ฉันสามารถเข้าสู่ระบบจาก Ubuntu ผ่าน ssh ไปยัง Windows หรือเพียงแค่เรียกใช้คำสั่งบนเครื่อง Windows:

$ ssh user@windowsmachine command

ใช้งานได้กับคำสั่งปกติเช่น DIR, MKDIR, ... แต่ไม่สามารถใช้งานกับสคริปต์ AutoHotKey ได้ เช่นกับ

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

ไม่มีอะไรเกิดขึ้นในเครื่อง Windows (เปิดใช้งานในเครื่องสคริปต์ทดสอบนี้เพิ่งแสดงกล่องข้อความทักทาย) ความพยายามต่อไปนี้ยังไม่ทำงาน:

$ 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'

ปรับปรุง: เคล็ดลับการทำงานเกือบ เช่นจะเปิดใช้งาน calc.exe:

$ ssh user@windowsmachine calc.exe

แต่ถ้าฉันเปิดตัว notepad.exe หรือแอปพลิเคชั่นอื่นฉันเห็นมันใน taskmanager ที่ทำงานเป็นกระบวนการพื้นหลังโดยไม่มี GUI (ฉันไม่ทราบ wjat ดังนั้นเป็นพิเศษเกี่ยวกับ Calc. exe ที่ทำงานตามปกติ) ฉันจัดการเพื่อแก้ไขปัญหาของ winexe เช่นกัน แต่สถานการณ์นั้นเหมือนกับ ssh - ยกเว้น calc.exe แอป GUI ทั้งหมดจะเปิดตัวเป็นกระบวนการพื้นหลัง ปัญหาที่กล่าวถึงนี้ ที่นี่ . ดังนั้นสิ่งที่สำคัญที่สุดคือต้องใช้ความพยายามอย่างมากในการรันแอพ GUI ใน Windows 10 จากโฮสต์ Linux ดังนั้นฉันเพิ่งเขียนแอปไคลเอนต์เซิร์ฟเวอร์ของตัวเองใน Qt 5 ซึ่งฟังพอร์ตที่แน่นอนและรันแอพ / สคริปต์ที่เกี่ยวข้องเมื่อได้รับคำสั่งที่ผู้ใช้กำหนดจากโฮสต์อื่น


ไม่แน่ใจว่าสคริปต์ของคุณกำลังทำอะไร แต่เป็นไปได้ไหมว่าสคริปต์ทดสอบแรกไม่ทำงานเพราะเป็นแอปพลิเคชันกราฟิก การเชื่อมต่อ SSH Linux-linux ต้องดำเนินการคำสั่ง "export display =: 0" เพื่อเรียกใช้แอป gui บนหน้าจอระยะไกลได้อย่างถูกต้อง
Blaine

ใช่ข้อเสนอ ahk สคริปต์กับกราฟิก (ปรากฏขึ้นในกล่องข้อความ) แต่ "export DISPLAY =: 0" ไม่ได้ช่วยอะไร
ThisGuy

เพื่อความชัดเจน: ฉันต้องการให้กล่องข้อความปรากฏขึ้นในเครื่อง windows ไม่ใช่ใน linux;)
ThisGuy

ตกลงเคล็ดลับใช้งานได้ แต่คัดเลือกอย่างมาก ไม่มีปัญหาในการเปิดใช้งาน calc.exe
ThisGuy

น่าสนใจ ... ใช่คำสั่งการส่งออกโดยทั่วไปหมายถึง "เรียกใช้เชลล์นี้ภายใต้การแสดงของเครื่องระยะไกล" ไม่สามารถคิดได้ว่าเหตุใดสคริปต์จึงไม่ทำงานกับ ...
Blaine

คำตอบ:


1

Windows กำลังใช้เซสชันเพื่อแสดงแอปพลิเคชัน GUI สำหรับผู้ใช้ เซิร์ฟเวอร์ ssh ของคุณอาจเป็นบริการ windows ที่ดำเนินการโดยผู้ใช้ SYSTEM ในเซสชัน 0 ซึ่งไม่มีการแสดงผลแบบกราฟิก ดังนั้นคุณจะไม่เห็น GUIs ของแอปพลิเคชันที่คุณกำลังเริ่มต้น

คุณสามารถตรวจสอบกับ Sysinternals Process Explorer . หลังจากเริ่มต้น (ในฐานะผู้ดูแลระบบ) ให้คลิกขวาที่แถบคอลัมน์คลิก "เลือกคอลัมน์" และเพิ่ม "เซสชัน", "การเข้าถึง UI", "ชื่อผู้ใช้" และ "ระดับความสมบูรณ์" ข้อมูลเหล่านี้จะแสดงให้คุณเห็นในแต่ละขั้นตอนว่าแอปพลิเคชันนั้นทำงานอยู่หรือไม่ ("เซสชัน") ไม่ว่าจะแสดงหน้าต่าง ("การเข้าถึง UI") ภายใต้บัญชีใดที่จะถูกดำเนินการ ("ชื่อผู้ใช้") และสิทธิ์ใด ๆ "ระดับความซื่อสัตย์" หมายถึงสูง ในฐานะผู้ดูแล )

ตอนนี้ถ้าคุณต้องการรันแอปพลิเคชันจากเซิร์ฟเวอร์ ssh ของคุณในเซสชันผู้ใช้ของคุณคุณสามารถทำได้ด้วยยูทิลิตี้ Sysinternals ตัวอื่นซึ่งเรียกว่า PsExec : psexec -i <session number> -accepteula <application to execute>. หากคุณต้องการให้กระบวนการทำงานกับผู้ใช้ปกติของคุณคุณสามารถใช้พารามิเตอร์ -u และคุณสามารถตัดสิทธิ์ได้ด้วย -l ถ้าคุณปรารถนา ตรวจสอบความช่วยเหลือในการทำงาน psexec -?.

หากต้องการค้นหาหมายเลขเซสชันของคุณคุณสามารถเรียกใช้คำสั่งได้ qwinsta. ด้วยวิธีนี้คุณไม่จำเป็นต้องมีแอปพลิเคชัน Process Explorer GUI

ตัวอย่างเช่นเมื่อต้องการเรียกใช้เครื่องคิดเลขให้ทำดังต่อไปนี้: จากเซสชัน ssh ให้เรียกใช้ qwinstaซึ่งควรให้สิ่งที่คล้ายกับคุณ:

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

ดังนั้นเซสชันของคุณที่คุณต้องการใช้คือ 1 ในตัวอย่างนี้ (อาจแตกต่างกันสำหรับคุณ) จากนั้นดำเนินการ psexec -i 1 -accepteula calc.exe. เครื่องคิดเลขควรปรากฏขึ้นบนเดสก์ท็อปของคุณ (คน -accepteula จำเป็นอย่างยิ่งสำหรับการใช้งานครั้งแรกของแอปพลิเคชัน หากไม่มีสิ่งนี้แอปพลิเคชันจะแสดงข้อตกลงสิทธิ์การใช้งานในหน้าต่าง GUI ซึ่งแน่นอนว่าจะไม่ปรากฏขึ้นสำหรับเหตุผลที่กล่าวถึงข้างต้น ในการโทรครั้งต่อไปคุณสามารถข้ามพารามิเตอร์ได้เนื่องจากครั้งหนึ่งเคยยอมรับหน้าต่าง GUI จะไม่ปรากฏขึ้นอีก)

หากคุณนำหน้า autohotkey.exe คำสั่งด้วย psexec ตามที่อธิบายไว้ข้างต้นฉันคาดว่าสคริปต์จะทำงาน แต่ฉันไม่สามารถทดสอบตัวเองได้เนื่องจากฉันไม่ทราบว่าแอปพลิเคชันนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.