Jak skonfigurować udostępnianie pulpitu zdalnego za pośrednictwem SSH?

44

Czy istnieje sposób wyświetlania (i kontrolowania) pulpitu zdalnego za pośrednictwem SSH? Nie będę mieć fizycznego dostępu do zdalnego hosta.

gerky
źródło
Vino nie dotyczy SSH: askubuntu.com/questions/4474/...
Ciro Santilli 新疆 新疆 中心 法轮功 六四 事件

Odpowiedzi:

51

Metoda 1:

Można to osiągnąć za pomocą vino vnc server & remmina (oba są dostarczane domyślnie z Ubuntu; jeśli nie, zainstaluj je przez uruchomienie sudo apt-get install remmina). Następnie uruchom następujące polecenia z komputera lokalnego w wierszu polecenia:

  1. ssh -Y gman@remote. Użyj zaufanego przekazywania X11, w przeciwnym razie nie zadziała

  2. vino-preferences. Otworzy się preferencje vino.

    vino-preferencje

  3. Kliknij również configure network automatically to accept connection. Ale nie wpisuj żadnego hasła, jego kodowanie base64 . Następnie kliknij zamknij. Następnie uruchomić:

    sudo -s
    
    export DISPLAY=:0.0
    
    xhost +
    
    /usr/lib/vino/vino-server & 
    

    Uruchomi serwer vino.

  4. Wyloguj się z serwera:

    xhost -
    
    Press CTRL+C twice
    
    exit
    
    exit
    
  5. Następnie otwórz remmina . Wybierz w vncramach protokołu.

    W basiczakładce umieść adres serwera w serverpolu.

    Na karcie ssh kliknij enable ssh tunnel. Poniżej ssh authenticationmoże być passwordlub public key:

    preferencje remmina

    Kliknij zapisz. Następnie kliknij dwukrotnie nazwę połączenia (home-desktop, jak pokazano na rysunku), aby rozpocząć przeglądanie pulpitu zdalnego.


Metoda 2:

x11vncjest prostym serwerem VNC i nie musisz bawić się ustawieniami Gnome ani 500 zapór ogniowych, po prostu zainstaluj x11vncna wszystkich swoich komputerach (z marionetką lub czymkolwiek, czego używasz do masowej kontroli).

Następnie z komputera lokalnego:

ssh user@host -L 5900:localhost:5900 "x11vnc -display :0 -noxdamage"

Oczywiście zamiana user@hostnazwy użytkownika i hosta / adresu IP komputera zdalnego.

Następnie użyj klienta VNC do połączenia localhost:5900. Komenda SSH uruchamia serwer VNC na komputerze zdalnym, a następnie tuneluje ten port z powrotem za pośrednictwem SSH. Nie musisz otwierać żadnych portów (o ile możesz już SSH).

Jeśli twoje komputery mają zabawne ustawienia wyświetlania, lepiej zostaw -display :0segment w poleceniu SSH. x11vncnastępnie automatycznie spróbuje znaleźć odpowiedni ekran.


Źródło: askubuntu

Khurshid Alam
źródło
Jeśli używasz vncviewer z wolnym połączeniem ssh, twoje polecenie powinno wyglądać tak vncviewer localhost::5900 -viewonly -encodings "tight" -quality 0(na Debianie / Ubuntu przeglądarka pochodzi z tightvnc) lub vncviewer localhost::5900 -viewonly -PreferredEncoding tight QualityLevel=0(na Red Hat / Fedora przeglądarka pochodzi z tigervnc), gdzie poziom jakości zarówno w Debianie, jak i w Redhat jest od 0 do 9, gdzie 9 jest najlepsze, ale wymaga szybkiego połączenia.
erik
@erik Dziękujemy za wyjaśnienie, jak używać go vncviewerdo powolnego połączenia. Ja osobiście prawdopodobnie ustawię, QualityLevel=4 or 5ponieważ 0 qualitylevel( 256 colorsjak sądzę) jest dla mnie zbyt nudny.
Khurshid Alam
1
Twoja „Metoda 2” jest idealna do szybkiego dostępu do fizycznego wyświetlacza zdalnie, bez specjalnych stałych ustawień. Musiałem dodać parametr -auth, jak wyjaśniono w komunikacie o błędzie, gdy wykonałem polecenie, ale poza tym działa idealnie. Dzięki!
Pierre
@gerky metoda 3 byłaby NoMachine, jest obecnie najszybsza i darmowa (pomimo braku opensource) i działa również na Androidzie
Aquarius Power
1
W przypadku metody 2 musiałem użyć go -auth guessi uruchomić jako root. Bardzo pomocne, dzięki!
Bob Carlson,
9

Przegląd rozwiązania

Zakładając, że masz już skonfigurowany OpenSSH Serverna komputerze hosta, musisz najpierw włączyć kontrolę pulpitu na komputerze hosta. Jeśli możesz najpierw włączyć kontrolę pulpitu na komputerze hosta lokalnie, przejdź do 1a. Jeśli musisz najpierw włączyć kontrolę pulpitu na komputerze hosta, przejdź do 1b.

Następnie utwórz profil klienta usług pulpitu zdalnego na komputerze klienckim, aby połączyć się z maszyną hosta za pośrednictwem tunelu SSH, a ostatecznie wyświetlić i kontrolować pulpit komputera hosta za pośrednictwem tunelu SSH.

1a. Lokalnie włącz zdalne sterowanie maszyną hosta

Wykonaj następujące czynności na komputerze hosta:

vino-preferences
  • vino-preferences także w Dash pod Desktop Sharing

wprowadź opis zdjęcia tutaj

  1. Kleszcz Allow other users to view your desktop
  2. Kleszcz Allow other users to control your desktop
  3. Kleszcz Require the user to enter this password
  4. Wpisz trudne do odgadnięcia hasło
  5. Blisko

1b. Zdalnie włącz zdalne sterowanie maszyną hosta

Wykonaj następujące czynności na komputerze klienckim, zastępując 123.123.12.3adres IP komputera hosta:

ssh -Y 123.123.12.3
  • -Y, Umożliwia zaufane przekazywanie X11. Zaufane przekazywanie X11 nie podlega kontrolom rozszerzenia X11 SECURITY.

vino-preferences
  • vino-preferences także w Dash pod Desktop Sharing

wprowadź opis zdjęcia tutaj

  1. Kleszcz Allow other users to view your desktop
  2. Kleszcz Allow other users to control your desktop
  3. Kleszcz Require the user to enter this password
  4. Wpisz trudne do odgadnięcia hasło
  5. Blisko

Utwórz profil klienta usług pulpitu zdalnego na komputerze klienta

Wykonaj następujące czynności na komputerze klienckim:

remmina
  • remmina również w Dash pod Remmina Remote Desktop Client

Ctrl+ Nlub Połączenie> Nowe

wprowadź opis zdjęcia tutaj

  1. Wpisz swój adres IP [123.123.12.3] tam, gdzie jest napisane Server
  2. Przejdź do SSHzakładki

wprowadź opis zdjęcia tutaj

  1. Kleszcz Enable SSH Tunnel
  2. Skieruj swojego klienta pulpitu na niestandardowy port SSH
  3. Ustaw SSH Authentication <username>tryb i
  4. Połączyć

Wyświetl i kontroluj maszynę hosta

Na komputerze klienckim, gdy zostaniesz zapytany o <username>hasło, wprowadź je, aby utworzyć tunel SSH. Gdy zostaniesz zapytany o hasło VNC, wprowadź hasło, które poprzednio wprowadziłeś na maszynę hosta.

Jeśli ten krok powiedzie się, powinieneś teraz przeglądać i sterować pulpitem komputera hosta z komputera klienckiego przez tunel SSH.

jtd
źródło
Wydaje się to dość wyczerpujące, ale gdzie jest zdefiniowany niestandardowy port 12345 na hoście?
John T
Domyślam się, że potrzebujesz gdzieś polecenia ssh uruchomionego z klienta, na przykład: ssh -L 12345: localhost: 5900 użytkownik @ server_ip przed użyciem klienta zdalnego zgodnie z opisem.
John T
3

Byłem w stanie ustawić nową instalację Ubuntu 16.04 ze zdalnego połączenia ssh za pomocą następującego skryptu:

#! / bin / bash
eksport WYŚWIETLACZ =: 0
czytaj -e -p "Hasło VNC: hasło" -i "ubuntu"
dconf write / org / gnome / desktop / remote-access / enabled true
dconf write / org / gnome / desktop / remote-access / prompt-prompt false
dconf write / org / gnome / desktop / remote-access / authentication-metody "['vnc']”
dconf write / org / gnome / desktop / remote-access / wymagają-szyfrowania false
dconf write / org / gnome / desktop / remote-access / vnc-password \ "\ '$ (echo -n $ password | base64) \' \"
dconf dump / org / gnome / desktop / remote-access /
sudo service lightdm restart

Cytowanie jest ważne dla każdego ustawienia łańcucha (pojedyncze tiki wewnątrz cudzysłowów). Aby dconf mógł pisać, potrzebuje dostępu do XWindows, dlatego właśnie potrzebna jest część DISPLAY eksportu. Myślę, że nadal musisz być zalogowany na pulpicie na rzeczywistym komputerze Ubuntu, aby połączyć się z VNC po tym. Polecenie zrzutu jest tylko po to, aby potwierdzić, że wszystkie ustawienia zostały zachowane, tak naprawdę nie jest to potrzebne.

Opcjonalnie możesz to zrobić, jeśli chcesz cały czas wyświetlać:

dconf write / org / gnome / desktop / wygaszacz ekranu / blokada włączona false
dconf write / org / gnome / desktop / wygaszacz ekranu / ubuntu-lock-on-suspend false
dconf write / org / gnome / desktop / session / idle-delay "uint32 0"
Integrator
źródło
2
  1. Możesz użyć ssh, aby rozpocząć sesję VNC
  2. Użyj Xnestz X11 forwording, aby zdalnie rozpocząć sesję i przesłać ją na bieżący komputer. (Robię to od czasu do czasu z moją stroną pi)

Używam Xnesttak:

  • Xnest :1 -ac &
  • następnie DISPLAY=:1 . /etc/X11/Xsession
poważny
źródło
0

Jak uruchomić serwer Vino zdalnie bez przekazywania X (tylko wiersz poleceń)

Zaloguj się na komputerze zdalnym jako użytkownik, który udostępni pulpit i przekieruje port 5900 na ten sam port na localhost. W PuTTY przekierowanie ustawia się w Connection / SSH / Tunnels. W wierszu polecenia użyj:

 ssh -L 5900:localhost:5900 user@remote-computer

Zainstaluj, vino-serverjeśli nie jest jeszcze zainstalowany. Na przykład:

sudo apt install vino

Włącz udostępnianie pulpitu (dopasowując numer wyświetlacza w 1. i 2. wierszu):

echo $DISPLAY
export DISPLAY=:0
dbus-launch --exit-with-session gsettings set org.gnome.Vino enabled true
dbus-launch --exit-with-session gsettings set org.gnome.Vino prompt-enabled false
dbus-launch --exit-with-session gsettings set org.gnome.Vino require-encryption false
/usr/lib/vino/vino-server

Uruchom przeglądarkę VNC i połącz się localhostz adresem serwera VNC.

Futal
źródło
Mam następujące. Wydaje się, że wszystko to zakłada, że ​​jesteś już zalogowany do konsoli GUI? No protocol specified Failed to connect to Mir: Failed to connect to server socket: No such file or directory Unable to init server: Could not connect: Connection refused Cannot open display: Run 'vino-server --help' to see a full list of available command line options
glon
0

na podstawie odpowiedzi @ Khurshid Alam przedstawiam następujący fragment:

ssh $TARGETHOST -L 5900:localhost:5900 "x11vnc -localhost -display :0 -noxdamage" &; sleep 10 && vinagre localhost

  • Jest to jedno polecenie, które nie wymaga żadnej interakcji

  • Tworzy tunel SSH z przekierowaniem portów, uruchamia się x11vncw dość bezpieczny sposób oraz uruchamia i łączy przeglądarkę VNC

  • Wymaga x11vnc na hoście docelowym, ale nie wymaga dalszej konfiguracji

  • Wymaga vinagre na twoim komputerze, ale możesz go trywialnie zmienić dla innej przeglądarki VNC
mnagel
źródło
0

Na komputerze serwera.

  • Otwórz „preferencje vino” z terminala lub „Udostępnianie pulpitu” za pomocą myślnika.

vino-preferencje

Na komputerze klienckim (z którego chcesz kontrolować interfejs użytkownika serwera).

  • Zachowaj ustawienia pokazane na poniższych obrazkach (ze zmianami w miejscu nazwy użytkownika i adresu IP).

* Karta podstawowa * * Karta Zaawansowane * * Karta SSH *

Pułapki

  • Kiedy próbowałem ustawić preferencje vino na serwerze ze zdalnego komputera za pomocą SSH, zostało to zmienione, ale połączenie się nie udało. Musiałem to zrobić bezpośrednio na serwerze (nie zdalnie). Nie znam przyczyny tego zachowania.
Vineeshvs
źródło