Portál AbcLinuxu, 30. dubna 2025 20:08
Jako většina mých blogpostů, má i tento za cíl vyprovokovat diskuzi, z níž bude možné vytěžit užitečné poznatky a tipy. Předpokládám, že většina z vás je obeznámena s tím, jak se pracuje přes ssh klienta na vzdáleném linuxovém stroji. Tenhle blogpost ve stručnosti shrnuje mé stávající poznatky jak přes ssh vzdáleně pracovat na stroji s MS Windows 10
Před třemi dny, jsem v blogpostu na téma Hromadná vzdálená správa MS Windows 10 zmínil, že do nich lze nainstalovat jako volitelnou součást OpenSSH server. Po prvotním nadšení, že lze ty Widle konečně rozumným způsobem donutit k restartu, přišly na řadu další otázky. Uvedu zde ty, na které jsem hledal odpovědi já:
Na tuhle otázku byla odpověď poměrně snadná. Po přihlášení přes ssh totiž máte k dispozici powershell, na kterém můžete spustit jednoduchý dotaz:
user@stroj:~$ ssh localadmin@10.0.3.111 query user localadmin@10.0.3.111's password: X11 forwarding request failed on channel 0 USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME kuomintang console 1 Active none 07.11.2018 14:27
Jak vidno z ukázkového výpisu, na stroji zrovna visel nějaký číňan. Sestřelit ho bez varování by v dnešní politické situaci mohlo vyvolat mezinárodní konflikt, proto jsem pro následující příklad vybral raději jiný stroj.
user@stroj:~$ ssh localadmin@10.0.3.112 query user localadmin@10.0.3.112's password: X11 forwarding request failed on channel 0 No User exists for *
Jak vidno, na tomto stroji nikdo další přihlášený, proto mohu udělat ukázkové vypnutí. Pro případ, že by se snad přeci jenom někdo během té minuty, než k němu dojde, hodlal přihlásit, pošlu na monitor informativní hlášku:
user@stroj:~$ ssh localadmin@10.0.3.112 'shutdown /r /t 60 /d u:4:1 /c "Sorry, machine gone over minute to reboot"' localadmin@10.0.3.112's password: X11 forwarding request failed on channel 0
Z IPv4 adres je vidno, že laboratorní stroje – 10.0.3.111, 10.0.3.112 a další – jsou na interní VLAN, která není zvenčí dostupná. Ty stroje nemají ani veřejné IPv6 adresy. Abych se na ně mohl dostat, využívám jako prostředníka linuxový stroj proxy
, s veřejnou IP adresou, který vidí i do vnitřní sítě. V souboru .ssh/config
mám uvedeno následující:
Host 10.0.3.* ForwardX11 yes proxycommand ssh -W %h:%p proxy identityfile ~/.ssh/id_rsa
Všimli jste si volby ForwardX11
? Právě ta způsobuje, proč ssh klient po přihlášení na stroj s MS Windows 10 řve:
… X11 forwarding request failed on channel 0 …
Na MS Windows 10 pochopitelně žádný X server, jehož okno bych si mohl touto cestou otevřít, neběží. Tím pádem ani není možné jednoduše "protáhnout" skrze ssh protokol nějakou klikací aplikaci. Nezbývá, než se potýkat s prostředím PowerShellu. Abychom však mohli pokračovat v pokusničení, musíme vypnutý stroj nejprve probudit.
Rozchodit Wake On Lan, se mi podařilo díky naťuknutí od Johanky. Nestačilo pouhé nastavení v UEFI BIOSU. Aby vše fungovalo, bylo nutné také nahradit Microsoftí ovladač originálním ovladačem od Intellu. S tím Microsoftím WOL také funguje – bohužel blbě. Při některém vypnutí zůstane karta aktivní, při jiném se vypne. Na nějakou zákonitost jsem zatím nepřišel. Takové ty věci kolem hibernace jsou všechny vypnuté. Jenom ten ovladač zatím není u všech strojů nahrazen.
Ovšem náš testovací stroj podchycený je. K probuzení lze použít libovolný laboratorní stroj, na kterém je nabootovaný disklessový linux – v následujícím příkladu je to stroj s IPv4 adresou 10.0.3.100, ovšem na uživatele root se nelze přihlásit přímo – ten má povoleno pouze přihlášení svým ssh klíčem, aby bylo možné administrovat všechny stroje najednou. Je tedy zapotřebí se nejprve přihlásit jako běžný uživatel, ověřený přes AD, a teprve pak – pokud znáte heslo na lokálního roota – se můžete dostat i na NTFS oddíl kde jsou lokální MS Windows 10.
Touto cestou můžete řešit řadu dalších věcí. Momentálně toho využijeme pouze k tomu, abych přes magický paket probudili vypnutý stroj s IPv4 adresou 10.0.3.112, jehož MAC adresa je 10:e7:c6:2a:c9:9f
lab-100 (DISKLESS) :~# wakeonlan 10:e7:c6:2a:c9:9f Sending magic packet to 255.255.255.255:9 with 10:e7:c6:2a:c9:9f
Na vedlejší konzoli můžete pomocí pingu sledovat, kdy stroj 10.0.3.112 ožije:
… From 1O.0.3.100 icmp_seq=47 Destination Host Unreachable From 10.0.3.100 icmp_seq=48 Destination Host Unreachable 64 bytes from 10.0.3.112: icmp_seq=52 ttl=255 time=0.360 ms 64 bytes from 10.0.3.112: icmp_seq=53 ttl=255 time=0.432 ms
Poznámka: Jak jsem zmínil v již odkazovaném blogpostu, laboratorní stroje bootujeme přes PXE. V produkčním nasazení výchozí volba v menu zavaděče udělá po 1 minutě automaticky shutdown. Pokud chci, aby mi nabootoval na všech strojích linux, nastavím jako default linux. Pokud chci mít na všech strojích windows, nastavím jako default windows. Pro jeden stroj si můžu udělat samostatný konfigurák (PXELINUX), nebo nastavit podmínku do souboru grub.cfg
(GRUB2) na straně TFTP serveru.
To je nejspíš první problematický bod se kterým se potkáte – teda ihned po absenci možnosti vzdáleného otevření okenní aplikace. MS Windows 10 totiž by default žádný konzolový editor nemají, ani obdobu příkazů less, cat či more. O dvoupanelovém manažeru souborů, jako byl např. starý dobrý Norton Commander, kterým se nechal inspirovat Midnight Commander, ani nemluvě.
Pokud jde o pohyb v rámci adresářového stromu, tak se hodí zkušenosti z prostředí DOSu. Pokud jde o editaci, určitě existují i další možnosti, ale já pro první pokus sáhnul pro nano. Ovšem jak ho na stroj 10.0.3.112 dostat, když na něj není přímý přístup?
Naštěstí OpenSSH client na MS Windows 10 má k dispozici i scp klienta a můj stroj má veřejnou IPv4 adresu, takže s jeho pomocí bylo možné tu jednu binárku a knihovnu na ten stroj dostat.
I když je powershell mocný nástroj, hodí se, je-li k dispozici dvoupanelový manažer pro práci se soubory. V diskuzi byl zmíněn Far, ale praktická zkouška ukázala, že je přes ssh nepoužitelný. Uspokojivě funguje Midnight Commander for Windows. Je o polovinu menší (FAR 60MB, MC 22MB). A jeho poslední build209 – z 26. října tohoto roku, tedy ani ne měsíc starý – má mít i podporu pro textovou konzoli MS Windows 10. I když zatím netuším, co to prakticky obnáší.
Nejprve ho ale musíme vykuchat z instalačího exáče. Build, který je ke stažení je totiž k dispozici pouze v této formě. Pokud používáte čistě Linuxové prostředí, můžete jej nainstalovat do prostředí wine, tak jako já, třeba přes PlayOnLinux. Stejně pak nebude potřeba nic víc, než adresář, ve kterém jsou soubory busybox.exe
, file.exe
a mc.exe
, který najdete v adresáři Program Files
– já si ho při instalaci pojmenoval mc
, abych nemusel řešit problém s mezerami v cestě a přesunul do kořene svého domovského adresáře.
Protože už na všech laboratorních strojích běží OpenSSH server v linuxu i ve Windows 10, můžeme využít k nakopírování scp.
Pokud je na stroji aktuálně nabootovaný diskless linux, mohu se na ně připojit přes cssh, diskový oddíl s MS Windows 10 namountovat na adresář /mnt
a pak si jej z každého stroje natáhnout náaledujícím příkazem:
root@lab:~# scp -r user@stroj:mc /mnt/Users/Localadmin/mc …
Pokud se na strojích zrovna pracuje, mohu ten adresář "poslat" přes scp rovnou do MS Windows 10:
user@stroj:~$ scp -r mc localadmin@10.0.3.111:mc localadmin@10.0.3.111's password: …
Jen pro úplnost uvedu, jaká by byla cesta, kdybych ponechal při instalaci navrhovaný název adresáře, a nepřesunul jej z prostředí wineprefixu temporary
:
user@stroj:~$ scp -r .PlayOnLinux/wineprefix/temporary/drive_c/Program\ Files/Midnight\ Commander localadmin@10.0.3.111:mc localadmin@10.0.3.111's password: …
Předchozí příklad jsem uvedl zcela záměrně, protože při použití scp z prostředí MS Windows 10 pravděpodobně narazíte, budete-li chtít kopírovat něco z cesty, na které se vyskytují mezery. Aby vám to fungovalo, nestačí použít zpětné lomítko, ale musíte použít kombinaci uvozovovek:
localadmin@LAB112 C:\Users\Localadmin>scp -r user@stroj:"'.PlayOnLinux/wineprefix/temporary/drive_c/Program Files/Midnight Commander'" mc
Při kopírování z jiných MS Windows 10 je třeba mít na paměti, že kořenový adresář ssh klienta je pro uživatele Localadmin: C:\Users\Localadmin
, pokud tedy budete chtít kopírovat něco z jiné pozice, musíte uvést absolutní cestu. Totéž platí i pro cílový stroj. Následující příklad demonstruje překopírování adresáře s Midnight Commanderem do adresáře "Program Files" na stroji 10.0.3.112
localadmin@LAB112 C:\Users\Localadmin>scp -r mc localadmin@10.0.3.113:"'C:\Program Files\'"
Jen pro úplnost ještě uvedu jak jsem instaloval intellí ovladače síťové karty na vzdálených strojích s MS Windows 10 přes ssh. Nejprve jsem je nakopíroval, s využitím výše uvedených postupů, a pak na konzolích přes cssh spustil (ukázkový příklad z jedné konzole):
localadmin@LAB113 C:\Users\Localadmin> runas /netonly /user:localadmin "C:\Users\Localadmin\Downloads\PROWinx64.exe" …
Zeptalo se to jenom na heslo. Zbytek už proběhl kdesi na pozadí.
Tiskni
Sdílej:
Sorry, machine gone over minute to rebootWTF?
Se zkusenostmi ze strednich skol v mem okoli by na tom byli lepe pouze gymnazisti bohuzel. Skolstvi neni schopne po x letech vyuky schopne i pres odpor narvat do lidi schopnost cist jednoduchy anglicky text, typicky dokumentaci :(Copak přečíst anglický text, to problém není. Větší problém je ho napsat, když anglicky neumíš. A což o to, napsat žblept do diskuze. Tam si vypomůžeš překladačem. Vlastně vůbec nechápu jak je možné že ti co jim píšu svou massa bob angličtinou do USA a Rakouska vůbec rozumí. Ještě že se bez ní obejdu při komunikaci s Polákama a Slovákama.
Jako chapu, taky nejsem zadnej talent na jazyky, ale aspon ten budouci cas by to tam chtelo, takhle to zni jako: sorry pred minutou jsem restartovali : )
…takhle to zni jako: sorry pred minutou jsem restartovali : )Doslovně vzato je to pravda, protože skutečně ve chvíli kdy odbachneš ten příkaz nastane proces, který by mohl přerušit na lokálním stroji jedině někdo s příslušnými právy.
No to asi jo (Kapicu nečtu pravidelně), protože souvislost nechápu.To je ovšem váš problém. Kdo to četl, tak ví, že na těch strojích se podle potřeby provozuje disklessový linux i lokálně instalované MS Windows 10. A jelikož Windows žádný X server nemají, je zcela zřejmé, že option ForwardX11 tam kvůli widlím nejspíš nebude.
To je ovšem váš problém.Děda je zas nějaký podrážděný po večeru…
Microsoft už vyhodil z oken RDP protokol
Opravdu? Máte podrobnosti? Čím to nahradil?
Mě spíše přijde směšný výpis přihlášených uživatelů citovaný v zápisku, kde očividně chybí samotná relace SSH, přes kterou je výpis získán. Vypadá to, že ani SSH není tou náhradou.
Mě spíše přijde směšný výpis přihlášených uživatelů citovaný v zápisku, kde očividně chybí samotná relace SSH, přes kterou je výpis získán.Můžete být trochu konkrétnější? Jednak to byl pouze ukázkový příklad. A pak - nechápu co máte na mysli tou SSH relací, protože to bylo překopírované rovnou z konzole.
Je na stroji někdo přihlášen?
Na tuhle otázku byla odpověď poměrně snadná. Po přihlášení přes ssh totiž máte k dispozici powershell, na kterém můžete spustit jednoduchý dotaz:
user@stroj:~$ ssh localadmin@10.0.3.111 query user localadmin@10.0.3.111's password: X11 forwarding request failed on channel 0 USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME kuomintang console 1 Active none 07.11.2018 14:27
Tady bych čekal další řádek s uživatelem localadmin, který přes SSH spuštil příkaz „query user“.
Opravdu? Máte podrobnosti? Čím to nahradil?Jsem zapomněl otazník (pro úplnost: navrhoval jsem použití RDP místo Xek pod okny)
Ano, i to by bylo řešení. Ovšem osobně preferuji pro administraci PowerShell a příkazovou řádku, protože se to dá naskriptovat. Neřeknu jeden nebo dva stroje. Ale když je těch strojů čtyřicet, tak už se vyplatí investovat trochu času do seznámení s PowerShellem. No a pak stačí použít ve smyčce scp k nakopírování skriptu a pak ho přes ssh spustit.Opravdu? Máte podrobnosti? Čím to nahradil?Jsem zapomněl otazník (pro úplnost: navrhoval jsem použití RDP místo Xek pod okny)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.