Skip to content

antony@notes:~/suse$ cat "Remote-Administration.md"

Remote Administration

2023-04-03· suse ·SUSE Linux Enterprise Server

Remote Administration

Preface

本文主要介紹如何使用 OpenSSH 或是 VNC 來進行遠端管理

可以透過點擊展開以下目錄,選擇想看的內容,跳轉至特定章節

:::warning

:::spoiler 文章目錄

[TOC]

:::

Understand Remote Administration with VNC

SSH v2 Connection Process

過去,在 Linux 系統之間建立遠端連線是使用 Telnet 協定,這允許遠端使用者登入 Linux 系統,並像坐在系統控制台上一樣從 shell 提示符運行命令。

但是,Telnet 有一個嚴重的缺點,它沒有加密或其他安全機制來防止偷聽。當您使用 Telnet 客戶端登入遠程系統時,您的用戶名和密碼(以及寫入終端的任何數據)都可以輕鬆地被嗅探和捕獲。

因此,Telnet 不再廣泛用於提供遠程訪問,而是使用 OpenSSH。OpenSSH 的工作方式與 Telnet 大致相同,提供對 Linux shell 提示符的遠程訪問。但是,OpenSSH 在傳輸系統之間的數據時加密數據。

Secure Shell(SSH)套件是為了提供安全通信而開發的,通過加密身份驗證信息(您的用戶名和密碼)以及主機之間交換的所有數據。

使用 SSH,數據流仍然可以被第三方捕獲,但內容是加密的,除非知道加密密鑰,否則無法解碼為明文。

Secure Shell(SSH)不僅提供 Telnet、rlogin、rsh 和 rcp 的所有功能,還包括一些 FTP 的功能。SSH 支持通過加密安全通道路由遠端 X11 和任何 TCP 連接來保護它們。

以下是透過 SSH 可以提供的基本功能:

  1. 從遠端主機登入
  2. 在遠端主機上進行互動或非互動命令執行
  3. 在不同網路主機之間進行文件複製並支援資料壓縮
  4. 在不安全的網路環境下提供密碼保護的認證和通訊
  5. 自動且透明地加密所有通訊
  6. 取代“r”工具的所有功能:rlogin、rsh 和 rcp
  7. Port forwarding (埠轉發) 和 Tunneling (通道)

SSH 不僅對通信進行加密並對客戶進行認證,還對相關的伺服器進行認證。有各種程序可用於伺服器認證。

在 SUSE Linux Enterprise Server 12 中,使用了 SSH 的開源實現(OpenSSH)。 OpenSSH可以作為開放源碼使用,因為它不使用任何專利算法。

默認情況下,安裝 SUSE Linux Enterprise Server 12 時沒有激活 OpenSSH 伺服器,但可以在安裝過程中或安裝後輕鬆激活。

下面描述了 SSH2 用於通過安全連接傳輸數據的過程中的步驟:

![](https://i.imgur.com/AReaGM2.png =70%x)

  1. 在伺服器和客戶端之間建立了一個連接。
  2. 伺服器現在包含一個密鑰對(DSA 或 RSA),公共和私人主機密鑰,將公鑰發送給 Client 端 2-1. 私鑰文件分別是 /etc/ssh/ssh_host_rsa_key(RSA)和 /etc/ssh/ssh_host_dsa_key(DSA)。
  3. 主機密鑰與 /etc/ssh/ssh_known_hosts~/.ssh/known_hosts 文件中的密鑰進行比較。
  4. 然後進行 Diffie-Hellman 密鑰協議,通過該協議,客戶端和伺服器就秘密會話密鑰達成一致,而不需要在網上發送該密鑰。
  5. 通信最終是對稱加密的

Connection via SSH

  • Secure Shell
    • ssh tux@da10.digitalairlines.com
  • Secure Copy
    • scp /etc/motd root@da10.digitalairlines.com:/etc/
    • scp root@da1.digitalairlines.com:/etc/motd /etc/
  • Secure FTP
    • sftp root@da1.digitalarilines.com

Manually Retrieve SSH Host Keys

  • ssh-keyscan <host>
    • 描述 : Read SSH host keys from another system
  • Option
    • -t,Type of key (用甚麼類型的加密演算法做出來的鑰匙)
  • To remove a SSH host key from the known_hosts file, use ssh-keygen with option -R:
    ssh-keygen -R <host> -f ~/.ssh/known_hosts

範例 :

~> ssh-keyscan da50

螢幕輸出 :

# da50 SSH-2.0-OpenSSH_6.6.1
Da50 1024 35
14763075313887762890721211435182838711560983853623973900394164593321789179
67536904026039322601801087591319766718758610486673209117063796933771128289
49660003683832…

-t 範例 :

~> ssh-keyscan -t rsa da50

螢幕輸出 :

# da50 SSH-2.0-OpenSSH_6.6.1
da50 ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAIEA3Nj0qGKjyGCBBhn487sMtAzyRFq9QPK9ZcPiILS
NPugTGbG9Y7+ta68JLAS+Bxp4yZGNhtw5tdnM3sRYWCj6KbjtzjdibuVUGv9xddrq8tUHl
8x3y2SY48JA9YozlO57QIT3VPp/cv5YFYPAlPttNQf0DIbp LkNlNuXTrhbfIsE=

Configure an SSH Server

Configuration file: /etc/ssh/sshd_config

AllowUsers

只允許在列表中列出的用戶進行 SSH 登錄,多個用戶之間用空格分隔。

DenyUsers

拒絕在列表中列出的用戶進行 SSH 登錄。

Protocol

SSH 協議版本(默認為 2)。

ListenAddress

sshd 監聽的本地地址,語法為 IP_address:port

Port

sshd 監聽的端口號(默認為 22),可以有多個選項。

PasswordAuthentication

指定是否允許密碼驗證,如果要禁用,將此選項和 UsePAM 設置為 no。

UsePAM

啟用 Pluggable Authentication Module interface (可插拔身份驗證模組接口)。

Configure an SSH Client

  • Configuration file: /etc/ssh/ssh_config
  • Individual user settings: ~/.ssh/config file

配置選項的優先順序是:

  1. Command line options,命令行選項
  2. ~/.ssh/config,客戶端配置文件
  3. /etc/ssh/ssh_config,全域配置文件

如果您想限制客戶端只能連接到已經添加到 ~/.ssh/known_hosts/etc/ssh/ssh_known_hosts 文件中的 SSH 伺服器,可以在客戶端配置文件中(~/.ssh/config)將 StrictHostKeyChecking 選項設置為 yes。

這會防止 SSH 客戶端在連接到未知的伺服器時簡單地將新的密鑰添加到 ~/.ssh/known_hosts,任何新的密鑰都必須手動使用編輯器添加。在此配置中,對密鑰發生變更的伺服器的連接會被拒絕。

從 SSH 版本 1.2.20 開始,StrictHostKeyChecking 有三個值可以選擇:yesnoask。默認設置是 ask,這意味著在輸入新密鑰之前會向用戶請求許可。

Create an SSH Key Pair

  • ssh-keygen,Generate SSH keys to be used as host keys or individual user keys
  • Option
    • -t,Type of key

範例 :

~> ssh-keygen -t dsa

螢幕輸出 :

Generating public/private dsa key pair.
Enter file in which to save the key (/home/tux/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tux/.ssh/id_dsa.
Your public key has been saved in /home/tux/.ssh/id_dsa.pub.
The key fingerprint is:
ef:73:c6:f6:8a:ff:9d:d1:50:01:cf:07:65:c5:54:8b

ssh-keygen -t rsassh-keygen -t dsa 是用來建立 SSH2 的金鑰對。

sshd 背景程序在第一次運行時使用它來生成 ssh 主機密鑰,如果它們還不存在的話。

這些金鑰存儲在 ~/.ssh 目錄中。對於 SSH2,默認的文件分別是 ~/.ssh/id_rsa~/.ssh/id_dsa,以及相應的具有 .pub 擴展名的公鑰檔案。

Upload Public Key to Server

The long way (scp + ssh + cat)

1. Copy the public key to the server:

~> scp ~/.ssh/id_dsa.pub tux@da5:tux-pubkey

2. Append the public key file to ~/.ssh/authorized_keys

tux@da1:~> ssh tux@da5
Password:
Last login: Tue May 30 12:03:29 2006 from da1.digitalairlines.com
tux@da5:~> cat tux-pubkey >> ~/.ssh/authorized_keys
tux@da5:~> exit 

3. Verify authentication with the DSA key:

tux@da1:~> ssh tux@da5
Enter passphrase for key '/home/tux/.ssh/id_dsa':
Last login: Tue May 30 12:03:40 2006 from da1.digitalairlines.com

使用 RSA 或 DSA 密鑰進行身分驗證時,需要將公鑰複製到伺服器上,然後將公鑰添加到 ~/.ssh/authorized_keys 文件中。

注意:ssh-copy-id 工具可用於簡化上述複製密鑰並將其添加到~/.ssh/authorized_keys文件的步驟。

The quick way (ssh-copy-id)

tux@da1:~> ssh-copy-id -i /home/tux/.ssh/id_dsa.pub tux@da5
Password:

-i,使用指定的公鑰文件,而不是默認的公鑰文件,向目標伺服器傳送公鑰。

啟動 ssh-agent 並使用 ssh-add 命令輸入密碼,之後 ssh-agent 監視所有 SSH 請求,並在必要時提供所需的私鑰。

您也可以使用 ssh-agent 進行圖形化登錄。如果您使用顯示管理器進行登錄,X 服務器會載入 /etc/X11/xdm/sys.xsession 文件。在 sys.xsession 文件中添加 usessh=”yes” 參數。下次用戶登錄到圖形介面時,ssh-agent 會自動啟動。

Use the SSH Agent

無需在每次連接時鍵入密碼

tux@da1:~> eval $(ssh-agent -s)
tux@da1:~> ssh-add .ssh/id_dsa
Enter passphrase for .ssh/id_dsa:
Identity added: .ssh/id_dsa (.ssh/id_dsa)

注意,以上範例透過 ssh-add 是將 要連接目標主機的私鑰加到 ssh-agent 這個程序中,來實現免密碼連接該主機

Understand Remote Administration with VNC

Remote Management

  • SLE Provides Management using Virtual Network Computing (VNC)
  • VNC enables management via a graphical desktop
  • VNC is:
    • Platform-independent
    • Open Source
  • VNC consists of two components
    • Server
    • Client

VNC

可透過圖形桌面控制遠端電腦,而非透過遠端 shell 存取。 無平台限制,可讓您從任何作業系統存取遠端機器。

SUSE Linux Enterprise Server 支援兩種不同類型的 VNC sessions:

  • One-time sessions,只要從客戶端的 VNC 連線保持,就會持續存在
  • persistent sessions,直到明確終止。

VNC Server

  • Configured using YaST
    • Remote Managment (VNC) option
  • Three options:
    • Allow Remote Management With Session Management
    • Allow Remote Management Without Session Management
    • Do not allow Remote Administration
  • Firewall configuration option is available

一次性的 VNC 會話是由遠端客戶端啟動的。它會在伺服器上啟動一個圖形化的登入畫面。這樣您可以選擇啟動會話的使用者,並且如果登入管理員支援的話,還可以選擇桌面環境。當您終止與該 VNC 會話的客戶端連線時,該會話中啟動的所有應用程序也會被終止。一次性 VNC 會話無法共享,但在同一主機上可以同時有多個會話。

啟用一次性 VNC 會話:

  1. Start YaST > Network Services > Remote Administration (VNC)
  2. 選擇啟用遠端管理的兩個選項之一。
  3. 如有必要,也可以勾選防火牆開放端口(例如,當您的網路介面配置為在外部區域時)。如果您有多個網路介面,可以通過防火牆詳細資訊將開放防火牆端口限制為特定介面。
  4. 完成後確認您的設置。
  5. 如果尚未安裝所有所需的套件,您需要批准安裝缺失的套件。

防火牆和 VNC 端口:

啟用遠端管理後,防火牆會開放 5801 和 5901 port 。如果提供 VNC 會話的網路介面受到防火牆的保護,您需要手動開放相應的端口,以啟用其他 VNC 會話的端口。

SUSE Linux Enterprise Server 支持兩種不同類型的 VNC 會話:

  1. 一次性會話會持續到客戶端斷開 VNC 連線,
  2. 永久性會話會一直持續,直到明確終止。

Remote Management Options

  • Allow Remote Management With Session Management
    • Enables multiple concurrent sessions
    • Access available to multiple clients simultaneously
    • All applications started in this session run regardless of client connections until the session is terminated (在此工作階段中啟動的所有應用程式都將運行,而不考慮客戶端連接,直到會話終止)
  • Allow Remote Management Without Session Management
    • One concurrent session only

在SUSE Linux Enterprise Server 上的預設設定,會以 1024x768 像素,16 位元色深度提供會話,並在 5901 端口(對應於 VNC 顯示器 1 )提供給一般的 VNC 查看器,以及在 580 1端口提供給網頁瀏覽器。

可以在不同的端口上提供其他的配置。

在一次性會話中,VNC 顯示器號碼和 X 顯示器號碼是獨立的。每個伺服器支援的配置都手動分配一個 VNC 顯示器號碼(例如:1)。每當使用其中一個配置啟動 VNC 會話時,它會自動獲得一個空閒的 X 顯示器號碼。

預設情況下,VNC 客戶端和伺服器會嘗試透過自我簽名的 SSL 憑證進行安全通訊,並在安裝後生成此憑證。您可以使用預設的憑證,或替換為自己的憑證。

當使用自簽名憑證時,您需要在首次連接 VNC 查看器和 Web 瀏覽器時確認其簽名。Java 客戶端通過 HTTPS 提供,使用與 VNC 相同的憑證。

Configure a One Time VNC Session

  • One-time VNC sessions are started via the xinetd daemon
  • A configuration file is located at /etc/xinetd.d/vnc
  • By default it offers:
    • Three for VNC viewers (vnc1 to vnc3)
    • Three serving a Java applet (vnchttpd1 to vnchttpd3)
    • By default only vnc1 and vnchttpd1 are active
  • To activate a configuration:
    • Comment the line disable = yes with a # character in the first column
  • To configure the Xvnc server:
    • See Xvnc --help

「One-time VNC sessions」是透過「xinetd daemon」啟動的。在路徑/etc/xinetd.d/vnc下有一個設定檔。預設提供六個設定區塊,其中三個是提供給 VNC viewer 使用(vnc1 到 vnc3),另外三個是提供給 ava applet 使用(vnchttpd1 到 vnchttpd3),而預設只啟用 vnc1 和 vnchttpd1。

如果要啟用一個設定,請在第一欄 disable = yes 的最前面加上#,或是把這一行整個移除。如果要停用一個設定,請把#移除或是新增這一行。

可以透過「server_args」選項來設定 Xvnc server,使用Xnvc --help指令可以列出選項列表。

在新增自定義設定時,請確定它們沒有使用其他設定、服務或現有持續性 VNC sessions 使用的埠號。

在作出設定更改後,請以 root 身分輸入以下指令來啟動設定更改:

systemctl reload xinetd

Client Access

  • Use any VNC client
    • Default port TCP 5901
  • Java enabled web browser
    • http://<ip or fqdn or host>:5801