Jak uzyskać dostęp do maszyny ubuntu przez VNC z ekranu logowania?


17

Chcę uzyskać dostęp do maszyny Ubuntu zdalnie przez VNC. Ale mogę uzyskać dostęp do maszyny Ubuntu tylko wtedy, gdy użytkownik jest zalogowany. Chcę uzyskać dostęp do maszyny Ubuntu przez VNC z samego ekranu logowania. Możemy uzyskać dostęp do wszystkich maszyn z systemem Windows z ekranu logowania. Nie byliśmy jednak w stanie uzyskać dostępu do komputera Ubuntu z ekranu logowania. Jest jakiś sposób, ale nie znam szczegółów. Czy ktoś może rozwiązać ten problem?


Jeśli druga maszyna jest w tej samej sieci LAN, można po prostu użyć XDMCP zamiast VNC. Jeśli nie jest w tej samej sieci LAN, nieakcelerowane X w sieci może być zbyt wolne.
Robin Green,

Odpowiedzi:


10

Najlepiej jest zainstalować xrdp Zainstaluj xrdp . Po instalacji możesz użyć klienta RDP, aby połączyć się z maszyną - zostaniesz wtedy poproszony o podanie poświadczeń, tak jak na ekranie logowania.


Zainstalowałem xrdp, ale nadal nie mogę uzyskać dostępu do maszyny ubuntu z ekranu logowania.
karthick87

@karthick: Czy łączysz się z maszyną za pomocą VNC, czy używasz klienta RDP?
Nathan Osman

Nie mogę znaleźć klienta RDP na moim komputerze. Gdzie to będzie?
karthick87

@karthick: Czy używasz Ubuntu jako swojego klienta? Jeśli tak, używany program nosi nazwę „Klient serwera terminali”. W systemie Windows nazywa się to „Pulpit zdalny” IIRC.
Nathan Osman

Tak dziękuję ci. Czy można utworzyć program uruchamiający dla klienta serwera terminali?
karthick87

5

Ogólnie polecamx11vnc .

TL; DR

apt-get -y install x11vnc
x11vnc -storepasswd

Wprowadź hasło, domyślnie jest zapisywane ~/.vnc/passwd w postaci zaszyfrowanej INSECURE. Można go odszyfrować, ponieważ klucz jest znany. .. chroń to za pomocą uprawnień systemu plików)

chmod 600 ~/.vnc/passwd

Zapisz mój skrypt pomocniczy lokalnie:

mkdir ~/bin/
curl https://gist.githubusercontent.com/trinitronx/76d2bf98489e5e3e84fa/raw/53885d87f91320b574ca4f7d609e4bb268274f68/start_x11vnc.sh  > ~/bin/start_x11vnc.sh && chmod +x ~/bin/start_x11vnc.sh

Z hosta klienta VNC:

ssh -f  -L 5900:127.0.0.1:5900 -p 22 youruser@your-ubuntu-host.example.com '~/bin/start_x11vnc.sh && sleep 10'

Lub z poziomu hosta serwera VNC uruchom:

~/bin/start_x11vnc.sh

poprzez terminal (lub uruchom go jako demona z -foreverjako usługi init.d , upstart służby , jednostki Systemd , czy jak chcesz)

Teraz uruchom swojego klienta VNC z hosta klienta, wskaż go na 127.0.0.1:5900:, zaloguj się przy użyciu hasła zapisanego powyżej.

Użyj X11 „Magic Cookie”

Większość menedżerów wyświetlania X (takich jak GDM , XDM , KDM ) uruchamia początkowy serwer X11 i uwierzytelnia się na nim za pomocą MIT Magic Cookie . W zależności od menedżera wyświetlania magiczne ciasteczko będzie znajdować się w jednej z różnych lokalizacji .

Miałem szczęście, otwierając sesję VNC na ekranie logowania Ubuntu GDM * UWAGA 1 , znajdując magiczne ciasteczko z tym skryptem :

#!/bin/bash
DEFAULT_DISPLAY=:0
X11VNC_DISPLAY="$DEFAULT_DISPLAY"

if [ -x /usr/bin/x11vnc ]; then
     [ "$1" == '-nocache' ] && CACHE_FLAG='-noncache' || CACHE_FLAG='-noncache'
     [ "$2" == '-guess' ] && GUESS_FLAG='-auth guess' || GUESS_FLAG=''
         [ -f /root/.vnc/passwd ] && PASSWORD="/root/.vnc/passwd"
         [ -f $HOME/.vnc/passwd ] && PASSWORD="$HOME/.vnc/passwd"
         [ ! -z "$PASSWORD" ] && x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage
    EXIT_CODE=$?
     if [ $EXIT_CODE -ne 0 ]; then

        echo "\n*********************************************************************"
        echo "*** Could not start x11vnc!  Trying again with gdm MAGIC_COOKIE! ***"
        echo "*********************************************************************\n"

        # Old GDM location for Ubuntu <= 17.10
        MAGIC_COOKIE_FILE=`sudo find /var/run/gdm/ -iname database | grep for-gdm`

        # New GDM location for Ubuntu >= 17.10
        [ -z "$MAGIC_COOKIE_FILE" ] && NUM_MAGIC_COOKIE_FILE_SESSIONS=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' 2>/dev/null | wc -l`
        if [ -z "$MAGIC_COOKIE_FILE" -a "$NUM_MAGIC_COOKIE_FILE_SESSIONS" -gt 1 ]; then
            # Find the current user's session
            MAGIC_COOKIE_FILE=`sudo find /run/user/$(id -u) -iwholename '*/gdm/*' -iname '*Xauthority'`
            X11VNC_DISPLAY=":1"
        else
            # Find the GDM user's session (or whichever shows up first in ps list)
            # This should pick up the original gdm session which grabs :0
            # If you login after gdm login screen, your Xorg server may end up on another display!
            # Workaround for now is to restart x11vnc on that display number
            [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' | head -n1`
        fi
        # Old lightdm location for Ubuntu <= 17.10
        [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /var/lib -name '.Xauthority' -o -wholename '/var/run/lightdm/root/:0' | head -n1`
        #sudo bash -c "[ -z \"$MAGIC_COOKIE_FILE\" -a -e /var/run/lightdm/root/:0 ]" && MAGIC_COOKIE_FILE='/var/run/lightdm/root/:0'
        [ -n "$MAGIC_COOKIE_FILE" -a -z "$GUESS_FLAG" ] && AUTH_COOKIE_FLAG="-auth $MAGIC_COOKIE_FILE"
        [ ! -z "$PASSWORD" ] && sudo x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage ${AUTH_COOKIE_FLAG}
    fi
fi

Mogę uruchomić ten skrypt (nazwałem go start_x11vnc.sh) w dowolnym momencie za pośrednictwem SSH ... nawet przed zalogowaniem za pomocą gdmekranu logowania. Uruchamia x11vncserwer, z którym mogę się następnie połączyć przez tunel SSH . (Użyj ssh -L 5900:127.0.0.1:5900lub dodaj LocalForward 5900 127.0.0.1:5900do wpisu hosta w ~/.ssh/config).

UWAGA 1 : W niektórych nowych wydaniach dystrybucji, takich jak Ubuntu> = 17.10, wyświetlanie sesji X logowania GDM jest całkowicie oddzielne od wyświetlania sesji X zalogowanego użytkownika. Dlatego należy najpierw połączyć się z sesją GDM X, zalogować się ... a na końcu rozłączyć i ponownie połączyć się z nowo rozpoczętą sesją X. Dlaczego teraz robią to w ten sposób, jest tajemnicą, ale złamało starą wersję tego skryptu.


Nie działa. Klient VNC łączy się, a następnie natychmiast zamyka
Dims

@ Dims Użyj polecenia:vncviewer <remote_ip>
Gokul NC

skrypt został zepsuty dla nowych wersji Ubuntu ... Zaktualizowałem go o hack, aby umożliwić jego ponowne działanie. Wygląda na to, że sesja wyświetlania gdm jest teraz oddzielna od sesji zalogowania, więc jeśli używasz tego skryptu na Ubuntu, najpierw zabierze Cię do ekranu logowania GDM, a następnie po zalogowaniu ekran sesji X zniknie. Teraz musisz zatrzymać pierwszy proces x11vnc i ponownie uruchomić skrypt, aby ponownie dołączyć do osobnej zalogowanej sesji i ekranu X.
TrinitronX


0

Oto jak to zrobić za pomocą VNC, jeśli nie chcesz używać RDP:

  1. Zainstaluj serwer X11VNC: sudo apt-get install x11vnc(lub przez Centrum oprogramowania Ubuntu -> Serwer X11VNC)
  2. Ustaw hasło:

    sudo mkdir /etc/x11vnc
    sudo x11vnc -storepasswd /etc/x11vnc/passwd
    

    Wybierz, yaby zapisać hasło.

  3. Utwórz pusty plik w /etc/initnazwie x11vnc.conf:

    sudo -H gedit /etc/init/x11vnc.conf
    
  4. Wklej to do pliku:

    start on login-session-start
    
    exec x11vnc -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc/passwd -rfbport 5900 -bg -o /var/log/x11vnc.log
    
  5. Zapisz i zamknij

  6. Uruchom ponownie Ubuntu

Otóż ​​to! Powinieneś być teraz w stanie połączyć się z dowolnym klientem VNC nawet przed zalogowaniem.


To nie zadziałało.
buława

@mace Interesujące, działało dla mnie, może zależy od wersji Ubuntu. Niestety nie pamiętam, jaka była wersja mojego Ubuntu, kiedy przeprowadziłem tę procedurę.
Didier A.

0

Odp: spróbuj z X11vnc

x11vnc nie był aktualizowany od września 2011 roku !!!! Znane są błędy, a ja mnie zaskakuje taki, który wyzwala przerwanie stosu x11vnc za każdym razem, gdy wyskakujące okno dialogowe (takie jak kliknięcie menu „Plik” w dowolnym oknie) rozłącza sesję.

Raspberry pi może połączyć się z sesją menedżera pulpitu na: 0, dlaczego do cholery jest to taki problem dla Ubuntu?!?! Dlaczego konieczne jest poleganie na osieroconym 7-letnim programie, aby to zrobić na dowolnym nowoczesnym systemie operacyjnym?

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.