Jako że jednak potrzebuję windowsa jako głównego systemu na stacji roboczej od zawsze nasuwał się problemy – jak się podłączyć do serwerów linuksowych czy zbudować lokalnie jakąś paczkę. Po długich eksperymentach z cygwinem, mingw i innymi wynalazkami doszedłem do wniosku że jak potrzebuję mieć shella linuksowego żeby użyć grepa, seda i awka to wystarczy bash wbudowany w dowolnego klienta gita – na przykład cudowną aplikację Github Desktop. A jeśli chodzi o prawdziwe zainstalowanie prawdziwego pakietu to nie ma innej opcji jak maszyna wirtualna. Warto jednak dołożyć kilka kroków żeby było przyjemniej.
Linuks na windowsie – maszyna wirtualna
Sercem mojego setupu jest maszyna wirtualna, którą nazwałem devARCH bo służy mi głównie do budowania binarek i stoi na Archu. Gołym archu bez środowiska graficznego nawet. Osobiście używam VMware Workstation ale jakikolwiek hyperwizor się nada. Przez to że mam trochę mocy na zbyciu to dostała wszystkie rdzenie procesora, limit pamięci na 32GB i dysk 128GB. Do mojej pracy aż nadto. Póki co nie miałem potrzeby parsować dużych plików z hosta gospodarza ale wtedy wystarczy zainstalować dodatek typu guest additions i zdefiniować folder współdzielony.
Warto wspomnieć iż o słynnym Linuksie w Windowsie wydanym przez Microsoft nie warto wspominać. To cygwinowe ubuntu (lub SuSE) które nada się do basha, ale nawet emulatora terminala nie ma porządnego…
Dostęp zdalny
Ale jak się wygodnie zasshować do tejże maszyny? PuTTY osobiście używam tylko do łączenia się do portu szeregowego – otwieranie każdej sesji w osobnym oknie, własny fikuśny agent ssh i dość ograniczone możliwości powodują że jest świetny jako coś na szybko co mieści się w jednej binarce ale na dłuższą metę – bez przesady.
Cygwinowe ssh ma swój urok, ale kiedy wpadnie nam do głowy support dziwnych terminali ($TERM) i kodowań przy ncurses – da się, ale można wygodniej. Ostatnio jest hype na emulator Hyper – cóż, użycie frameworka Electron czyli silnika chrome odpalającego aplikację w JS – tego samego co do Atoma kończy jego użyteczność na krótkiej sesji ssh.
Z ciekawej listy na https://www.slant.co/topics/1552/~terminal-emulators-for-windows przetestowałem większość. I jedyny bezpłatny który zdał egzamin to MobaXterm. Plusuje mnogością obsługiwanych protokołów i opcji ich konfiguracji. W tym opcją wysyłania heartbeatu po SSH żeby sesja się nie urwała. Działa także mini przeglądarka plików (która eksperymentalnie podąża za $PWD), tunelowanie Xów i własny, ale kompatybilny z normalnymi kluczami agent. Poza tym miliard innych opcji które mogą się przydać w przyszłości – kolorowanie składni, logowanie sesji do pliku tekstowego, narzędzia jak GUI nmapa czy wbudowane serwery. Dla użytkowników domowych jest darmowy z pewnymi ograniczeniami (jak liczba sesji na raz ograniczona do 12 – da się wytrzymać oraz limitem życia usług takich jak serwer NFS do 6 minut). $69/usera to nie tak drogo za wersję pro zważywszy na stertę funkcjonalności wspomagających. Ma także wbudowanego cygwina więc i lokalny shell nadaje się do jakiegokolwiek użytku.
Dostęp zdalny – GUI
Może się okazać że z jakiegoś graficznego programu trzeba będzie jednak skorzystać. Albo podłączyć się do całej sesji (mam taki dziwny setup w jednym miejscu że najwygodniej mi łączyć się do laptopa ze stacji roboczej żeby nie marnować ekranu). Tu rozwiązaniem jest x2go. Opiera się na NX i działa znacznie efektywniej niż VNC i wygodniej niż czyste tunelowanie Xorga. Wymaga paczki na serwerze linuksowym, a programy klienckie dostępne są na wszystkie systemy. Warto dodać że poza zwykłym podłączaniem się do nowej sesji X i jej wznawianiem w czasie późniejszym można także podpiąć się do fizycznego TTY lub odpalić pojedynczą aplikację zamiast środowiska graficznego. Projekt jest bardzo dojrzały – obsługuje także MFA w SSH, włączając w to yubikeyowe OTP dzięki mojemu requestowi na kilka godzin przed releasem 😀
Pliki
Zatem mamy jak się podłączyć do linuksa lokalnego bądź też do serwera zdalnego. Ale jak dobrać się do plików – można niby używać zdalnego emacsa czy vi ale czasem przydaje się coś większego. Na UNIXach naturalny jest SFTP. Najlepiej byłoby mieć foldery zamontowane jako dysk sieciowy bo używanie WinSCP przy całym jego uroku nie nadaje się do jakkolwiek poważnej pracy poza edycją skryptów PHP w locie. Tylko że Windows nie ma klienta SSHFS. Jest niby Dokan który implementuje FUSE przez co używa linuksowego sshfs ale rozwiązanie jest tragicznie niestabilne. MountainDuck wygląda i działa obiecująco, ale jest płatny.
Istnieje na szczęście alternatywa – SFTP Net Drive, który dla użytkowników domowych jest darmowy ma jednak pewne ograniczenie logiczne w GUI – nie da się użyć kilku połączeń na raz, a z jakiegoś powodu da się mieć tylko jedną instancję okienka na raz. Da się to jednak obejść wpierw tworząc w GUI profile a następnie używając trybu CLI i puszczania aplikacji w tle:
[Daniel.YGGDRASIL] ➤ cd "/cygdrive/c/Program Files (x86)/SFTP Net Drive 2017" [Daniel.YGGDRASIL] ➤ ./SftpNetDrive.exe start /profile:"devarch-proj" & [2] 32 [Daniel.YGGDRASIL] ➤ ./SftpNetDrive.exe start /profile:"####-home" & [1] 42980
Sama konfiguracja w GUI jest przyjemna i ma mnóstwo opcji:
W windowsie pojawia nam się nowy dysk sieciowy i nie ma problemu z rozszerzonymi atrybutami (nie psują się po stronie serwera)
Edytor plików
Mój wybór zasadniczo nie zmienił się względem tego sprzed trzech lat (poza faktem że kupiłem licencję; info praktyczne – licencji można używać na dowolnej liczbie urządzeń, w tym w pracy) – dalej Sublime Text mimo głosów że edytor się skończył to pluginów przybywa, a aktualizacje też się pojawiają. Co do pluginów to nie używam wielu (większość pomocna jest przy HTMLu): A File Icon, Color Highlighter, ColorPick, Emmet, Git, MarkdownLivePreview, Perforce (głównie w pracy), SideBarEnhancements, SublimeLinter, SublimeREPL oraz motywu Material-Theme-Darker.tmTheme. Rozszerzanie możliwości jest także wygodne – napisałem już kilka podświetlaczy składni dla dziwnych formatów logów i konfiguracji.
Łączność
O użyciu ZeroTiera pisałem jakiś czas temu – generalnie jest to Software Defined Network. Dzięki temu można dostać się do takowej wirtualki z zewnątrz, a nawet zwiększyć bezpieczeństwo całej floty serwerów dopuszczając logowanie tylko z sieci zerotier (warto jednak zabezpieczyć sobie dostęp KVM do VPSów czy serwerów kolokowanych na wypadek awarii). O estetycznej adresacji nie wspominając. Kiedy dołożymy współdzielone foldery do maszyny wirtualnej można zdalnie dostać się do stacji roboczej i korzystać z jej zasobów – przez SSH.
Podsumowanie na Windowsie
Dla pełnej wygody z używania Linuksa pod Windowsem w mojej opinii trzeba jednak maszyny wirtualnej z prawdziwym Linuksem i zestawu narzędzi do podłączenia się do niej – jest on też niezbędny żeby pracować na innych serwerach. W skład zestawu wchodzi odpowiednik sshfs, wygodny terminal i edytor tekstu.
A co z macOS?
Nie jest to mój główny system, używam go tylko na kanapie, w terenie i serwerowni. No i przez to że jest systemem unixowym (zgodny z POSIX? to cicho!) i ma basha to da się działać prawie jak na Linuksie. Osobiście kiedy mogę to używam natywnych rozwiązań (gcc, kompilator go, python, perl, ruby i reszta działają przecież dobrze i nie ma gimnastyki z dziwnymi ścieżkami jak na Windowsie) które można instalować przez brew. Jakiś czas temu miałem maszynę wirtualną z Linuksem do budowania paczek, ale macbook air nie ma kolosalnej mocy więc przerzuciłem się na budowanie na zdalnym serwerze na którym i tak cały projekt działał.
Jeśli chodzi o terminal to cóż – jak używam SSH to wbudowana aplikacja jest wystarczająca (głównie dlatego że prawie zawsze używam jej na 13″ ekranie – cudów nie wymagam, a prawdziwe SSH to prawdziwe SSH). Oczywiście kwestia edytora i ZeroTiera pozostaje bez zmian.
kiedy wpisuje adresacje ZeroTier dla VNC, niestety nie działa. Otworzyłem odpowiednie porty w firewall do tego celu. Co powinienem zrobić?
A jak wygląda sytuacja z pingiem? Jeśli nie dochodzi sprawdź czy obie strony połączenia dostały adres IP, ewentualnie zrestartuj usługę. Czasem też webowe UI zerotiera nie zapisuje zmian jeśli chce się za szybko przejść dalej.
Jak wygląda kwestia bezpieczeństwa w przypadku ZeroTiera?
Dość rozsądnie.
W kwestii kryptografii end-to-end jest 256-bitowa Salsa20 z autoryzacją Poly1305 (https://www.zerotier.com/manual/#2_1_3), całość jest open source więc łatwo można przejrzeć kod źródłowy i zbudować samodzielnie. Nie trzeba też korzystać z infrastruktury udostępnionej za darmo przez twórców – można zbudować własną.
W połączeniu z używaniem bezpiecznych protokołów transportowych można uznać używanie ZT za dość bezpieczne.