จะตั้งค่าการแชร์เดสก์ท็อประยะไกลผ่าน SSH ได้อย่างไร?


44

มีวิธีดู (และควบคุม) เดสก์ท็อประยะไกลผ่าน SSH หรือไม่ ฉันจะไม่สามารถเข้าถึงเครื่องโฮสต์จากระยะไกลได้


คำตอบ:


51

วิธีที่ 1:

สิ่งนี้สามารถทำได้กับเซิร์ฟเวอร์ vino vnc & remmina (ทั้งคู่มาเป็นค่าเริ่มต้นด้วย ubuntu; หากไม่ได้ติดตั้งโดยใช้sudo apt-get install remmina) จากนั้นเรียกใช้คำสั่งต่อไปนี้จากโลคัลคอมพิวเตอร์ในเทอร์มินัลพรอมต์:

  1. ssh -Y gman@remote. ใช้การส่งต่อ X11 ที่เชื่อถือได้มิฉะนั้นจะไม่ทำงาน

  2. vino-preferences. มันจะเปิดการตั้งค่า vino

    Vino-การตั้งค่า

  3. คลิกยังconfigure network automatically to accept connectionด้วย แต่ไม่ต้องใส่รหัสผ่านใด ๆ base64 ของการเข้ารหัส จากนั้นคลิกปิด จากนั้นเรียกใช้:

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

    มันจะเริ่มต้นเซิร์ฟเวอร์ vino

  4. ออกจากระบบเซิร์ฟเวอร์:

    xhost -
    
    Press CTRL+C twice
    
    exit
    
    exit
    
  5. จากนั้นเปิดremmina เลือกvncภายใต้โปรโตคอล

    ภายใต้basicแท็บให้ใส่ที่อยู่เซิร์ฟเวอร์ในserverฟิลด์

    บนแท็บ SSH enable ssh tunnelคลิก ภายใต้ssh authenticationอาจเป็นpasswordหรือpublic key:

    remmina-การตั้งค่า

    คลิกบันทึก จากนั้นคลิกสองครั้งที่ชื่อการเชื่อมต่อ (โฮมเดสก์ท็อปตามที่แสดงในรูปภาพ) เพื่อเริ่มการเรียกดูเดสก์ท็อประยะไกล


วิธีที่ 2:

x11vncเป็นเซิร์ฟเวอร์ VNC ที่เรียบง่ายและคุณไม่ต้องวุ่นวายกับการตั้งค่า Gnome หรือไฟร์วอลล์ 500 เครื่องเพียงแค่ติดตั้งx11vncบนคอมพิวเตอร์ทุกเครื่องของคุณ (พร้อมหุ่นเชิดหรืออะไรก็ตามที่คุณใช้สำหรับการควบคุมจำนวนมาก)

จากนั้นใช้งานคอมพิวเตอร์ในพื้นที่ของคุณ:

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

เห็นได้ชัดว่าการสลับuser@hostชื่อผู้ใช้และชื่อโฮสต์ / IP ของคอมพิวเตอร์ระยะไกล

และจากนั้นใช้ไคลเอนต์ VNC localhost:5900ที่คุณเลือกที่จะเชื่อมต่อไปยัง คำสั่ง SSH เริ่มต้นเซิร์ฟเวอร์ vnc บนคอมพิวเตอร์ระยะไกลจากนั้นอุโมงค์กลับไปที่พอร์ตนั้นผ่าน SSH คุณไม่จำเป็นต้องเปิดพอร์ตใด ๆ (ตราบใดที่คุณสามารถ SSH ได้แล้ว)

หากคอมพิวเตอร์ของคุณมีการตั้งค่าการแสดงผลที่ตลกคุณอาจทำได้ดีกว่าที่จะออกจาก-display :0กลุ่มในคำสั่ง SSH x11vncจะพยายามค้นหาจอแสดงผลที่ถูกต้องโดยอัตโนมัติ


ที่มา: askubuntu


หากคุณใช้ vncviewer ด้วยการเชื่อมต่อแบบช้า ssh คำสั่งของคุณควรมีลักษณะvncviewer localhost::5900 -viewonly -encodings "tight" -quality 0(บน Debian / Ubuntu ที่วิวเวอร์มาจาก tightvnc) หรือvncviewer localhost::5900 -viewonly -PreferredEncoding tight QualityLevel=0(บน Red Hat / Fedora วิวเวอร์มาจาก tigervnc) ซึ่งระดับคุณภาพทั้ง Debian และ Redhat คือ ระหว่าง 0 ถึง 9 โดยที่ 9 ดีที่สุด แต่ต้องการการเชื่อมต่อที่รวดเร็ว
erik

@erik ขอบคุณสำหรับการอธิบายวิธีการใช้กับvncviewerการเชื่อมต่อที่ช้า ฉันเองอาจจะตั้งค่าQualityLevel=4 or 5เพราะ0 qualitylevel(ซึ่งก็คือ256 colorsฉันคิดว่า) มันน่าเบื่อเกินไปสำหรับฉัน
Khurshid Alam

1
"วิธีที่ 2" ของคุณสมบูรณ์แบบสำหรับการเข้าถึงจอแสดงผลทางกายภาพอย่างรวดเร็วจากระยะไกลโดยไม่ต้องมีการตั้งค่าถาวรพิเศษใด ๆ ฉันต้องการเพิ่มพารามิเตอร์ -auth ตามที่อธิบายในข้อความแสดงข้อผิดพลาดเมื่อฉันเรียกใช้งานคำสั่ง แต่ทำงานได้อย่างสมบูรณ์ ขอบคุณ!
ปิแอร์

@gerky วิธีที่ 3 จะเป็น NoMachine ซึ่งปัจจุบันเป็นวิธีที่เร็วที่สุดและฟรี (แม้จะไม่ใช่ opensource) และทำงานบน Android ด้วย
Aquarius Power

1
สำหรับวิธีที่ 2 ฉันต้องใช้-auth guessและเรียกใช้เป็นรูต มีประโยชน์มากขอบคุณ!
บ๊อบคาร์ลสัน

9

ภาพรวมของโซลูชัน

สมมติว่าคุณได้ติดตั้งOpenSSH Serverบนเครื่องโฮสต์ของคุณแล้วคุณต้องเปิดใช้งานการควบคุมเดสก์ทอปบนเครื่องโฮสต์ของคุณ หากคุณสามารถเปิดใช้งานการควบคุมเดสก์ท็อปบนเครื่องโฮสต์ของคุณก่อนจากนั้นไปที่ 1a หากคุณต้องเปิดใช้งานการควบคุมเดสก์ท็อปบนเครื่องโฮสต์ของคุณจากระยะไกลให้ไปที่ 1b

ถัดไปสร้างโปรไฟล์ไคลเอนต์เดสก์ท็อประยะไกลบนเครื่องไคลเอนต์ของคุณเพื่อเชื่อมต่อกับเครื่องโฮสต์ผ่านอุโมงค์ SSH และดูและควบคุมเดสก์ท็อปของเครื่องโฮสต์ผ่านอุโมงค์ SSH ในที่สุด

1a เปิดใช้งานการควบคุมระยะไกลของเครื่องโฮสต์ในเครื่อง

ทำสิ่งต่อไปนี้บนเครื่องโฮสต์:

vino-preferences
  • vino-preferences ยังอยู่ใน Dash ภายใต้ Desktop Sharing

ป้อนคำอธิบายรูปภาพที่นี่

  1. เห็บ Allow other users to view your desktop
  2. เห็บ Allow other users to control your desktop
  3. เห็บ Require the user to enter this password
  4. ป้อนข้อความรหัสผ่านที่คาดเดายาก
  5. ปิด

1b เปิดใช้งานการควบคุมระยะไกลของเครื่องโฮสต์จากระยะไกล

ทำสิ่งต่อไปนี้บนเครื่องไคลเอนต์แทนที่123.123.12.3ด้วยที่อยู่ IP ของเครื่องโฮสต์ของคุณ:

ssh -Y 123.123.12.3
  • -Y เปิดใช้งานการส่งต่อ X11 ที่เชื่อถือได้ การส่งต่อ X11 ที่เชื่อถือได้จะไม่ถูกควบคุมโดยส่วนขยาย X11 SECURITY

vino-preferences
  • vino-preferences ยังอยู่ใน Dash ภายใต้ Desktop Sharing

ป้อนคำอธิบายรูปภาพที่นี่

  1. เห็บ Allow other users to view your desktop
  2. เห็บ Allow other users to control your desktop
  3. เห็บ Require the user to enter this password
  4. ป้อนข้อความรหัสผ่านที่คาดเดายาก
  5. ปิด

สร้างโปรไฟล์ลูกค้าเดสก์ท็อประยะไกลบนเครื่องไคลเอนต์ของคุณ

ทำสิ่งต่อไปนี้บนเครื่องไคลเอ็นต์:

remmina
  • remmina ยังอยู่ใน Dash ภายใต้ Remmina Remote Desktop Client

Ctrl+ Nหรือการเชื่อมต่อ> ใหม่

ป้อนคำอธิบายรูปภาพที่นี่

  1. กรอกที่อยู่ IP ของคุณ [123.123.12.3] ตามที่แจ้งไว้ Server
  2. สลับไปที่SSHแท็บ

ป้อนคำอธิบายรูปภาพที่นี่

  1. เห็บ Enable SSH Tunnel
  2. ชี้ไคลเอ็นต์เดสก์ท็อปของคุณไปยังพอร์ต SSH ที่ไม่ได้มาตรฐาน
  3. ตั้งค่าSSH Authentication <username>และโหมดของคุณ
  4. เชื่อมต่อ

ดูและควบคุมเครื่องโฮสต์

บนเครื่องไคลเอนต์เมื่อถูกถาม<username>รหัสผ่านให้ป้อนเพื่อสร้างอุโมงค์ SSH เมื่อถามถึงรหัสผ่าน VNC ให้ป้อนวลีรหัสผ่านที่คุณป้อนก่อนหน้านี้ลงในเครื่องโฮสต์

หากประสบความสำเร็จในขั้นตอนนี้คุณควรดูและควบคุมเดสก์ท็อปของเครื่องโฮสต์จากเครื่องไคลเอนต์ของคุณผ่านอุโมงค์ SSH


ดูเหมือนว่าจะค่อนข้างครอบคลุม แต่มีการกำหนดพอร์ตแบบกำหนดเอง 12345 ไว้บนโฮสต์ที่ไหน
John T

ฉันเดาว่าคุณต้องใช้คำสั่ง ssh จากไคลเอนต์บางอย่างเช่น: ssh -L 12345: localhost: 5900 user @ server_ip ก่อนใช้รีโมตไคลเอ็นต์ดังที่อธิบายไว้
John T

3

ฉันสามารถตั้งค่าการติดตั้ง Ubuntu 16.04 ใหม่จากการเชื่อมต่อ ssh ระยะไกลด้วยสคริปต์ต่อไปนี้:

#! / bin / ทุบตี
ส่งออก DISPLAY =: 0
อ่าน -e -p "รหัสผ่าน VNC: รหัสผ่าน" -i "ubuntu"
dconf write / org / gnome / desktop / remote-access / enabled จริง
dconf write / org / gnome / desktop / remote-access / prompt-enabled false
dconf write / org / gnome / desktop / remote-access / authentication-methods "['vnc']"
dconf เขียน / org / gnome / desktop / remote-access / require-encryption เท็จ
dconf เขียน / org / gnome / desktop / remote-access / vnc-password \ "\ '$ (echo -n $ รหัสผ่าน | base64) \' \"
dconf dump / org / gnome / desktop / remote-access /
sudo service lightdm ทำการรีสตาร์ท

การอ้างอิงเป็นสิ่งสำคัญสำหรับการตั้งค่าสตริงใด ๆ (เห็บเดียวภายในเครื่องหมายคำพูด) สำหรับ dconf เพื่อให้สามารถเขียนได้จำเป็นต้องเข้าถึง XWindows ดังนั้นจึงจำเป็นต้องมีส่วนส่งออก DISPLAY ฉันคิดว่าคุณยังต้องเข้าสู่เดสก์ท็อปบนเครื่อง Ubuntu จริงเพื่อเชื่อมต่อกับ VNC หลังจากนี้ คำสั่ง dump นั้นอยู่ที่นั่นเพื่อยืนยันการตั้งค่าทั้งหมดที่คุณมีคุณไม่ต้องการ

เป็นทางเลือกคุณอาจต้องการทำสิ่งนี้หากคุณต้องการให้จอแสดงผลอยู่ตลอดเวลา:

dconf write / org / gnome / desktop / screensaver / lock-enabled false
dconf write / org / gnome / desktop / screensaver / ubuntu-lock-on-suspend false
dconf write / org / gnome / desktop / session / idle-delay "uint32 0"

2
  1. คุณสามารถใช้ ssh เพื่อเริ่มเซสชัน vnc
  2. ใช้Xnestกับ X11 สำหรับการอ้างอิงเพื่อเริ่มเซสชันจากระยะไกลและส่งต่อไปยังคอมพิวเตอร์ปัจจุบันของคุณ (ฉันทำสิ่งนี้เป็นครั้งคราวกับ pi ของฉัน) man page

ฉันใช้Xnestอย่างนั้น:

  • Xnest :1 -ac &
  • แล้วก็ DISPLAY=:1 . /etc/X11/Xsession

0

วิธีเริ่มเซิร์ฟเวอร์ Vino จากระยะไกลโดยไม่ต้องส่งต่อ X (บรรทัดคำสั่งเท่านั้น)

เข้าสู่ระบบคอมพิวเตอร์ระยะไกลในฐานะผู้ใช้ที่จะแชร์เดสก์ท็อปและพอร์ตส่งต่อ 5900 ไปยังพอร์ตเดียวกันบนโลคอลโฮสต์ ด้วย PuTTY การเปลี่ยนเส้นทางถูกตั้งค่าใน Connection / SSH / Tunnels ด้วยบรรทัดคำสั่งให้ใช้:

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

ติดตั้งvino-serverหากยังไม่ได้ติดตั้ง ตัวอย่างเช่น:

sudo apt install vino

เปิดใช้งานการแชร์เดสก์ท็อป (จับคู่หมายเลขที่แสดงในบรรทัดที่ 1 และ 2):

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

เริ่มโปรแกรมดู VNC และเชื่อมต่อกับlocalhostที่อยู่เซิร์ฟเวอร์ VNC


มีดังต่อไปนี้ ดูเหมือนว่าทั้งหมดนี้จะถือว่าคุณได้เข้าสู่คอนโซล 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
สาหร่าย

0

จาก @Khurshid Alam คำตอบฉันขอนำเสนอตัวอย่างต่อไปนี้:

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

  • มันเป็นคำสั่งเดียวที่ไม่ต้องการการโต้ตอบใด ๆ

  • มันสร้างอุโมงค์ SSH ด้วยการส่งต่อพอร์ตเริ่มต้นx11vncด้วยวิธีที่ปลอดภัยและเปิดใช้งานและเชื่อมต่อกับวิวเวอร์ VNC

  • มันต้องการ x11vnc บนโฮสต์เป้าหมาย แต่ไม่มีการกำหนดค่าเพิ่มเติม

  • มันต้องมี vinagre บนพีซีของคุณ แต่คุณสามารถเปลี่ยนมันได้เล็กน้อยสำหรับ VNC viewer อื่น

0

ในเซิร์ฟเวอร์พีซี

  • เปิด 'การตั้งค่า vino' จากเทอร์มินัลหรือ 'การแชร์เดสก์ท็อป' โดยใช้เส้นประ

Vino-การตั้งค่า

ในไคลเอนต์พีซี (จากตำแหน่งที่คุณต้องการควบคุม UI ของเซิร์ฟเวอร์)

  • เก็บการตั้งค่าตามที่แสดงในภาพด้านล่าง (พร้อมเปลี่ยนที่ชื่อผู้ใช้และ IP)

แท็บ * พื้นฐาน * แท็บ * ขั้นสูง * แท็บ * SSH *

ผิดพลาด

  • เมื่อฉันพยายามตั้งค่า vino-preferences ในเซิร์ฟเวอร์จากพีซีระยะไกลโดยใช้ SSH มันก็เปลี่ยนไป แต่การเชื่อมต่อไม่ได้เกิดขึ้น ฉันต้องทำในเครื่องเซิร์ฟเวอร์โดยตรง (ไม่ใช่จากระยะไกล) ฉันไม่ทราบสาเหตุของพฤติกรรมนี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.