Ubuntu 22.04的远程登录
6.1 快速上手:搭建实验环境
6.1.1 物理网络 vs 虚拟机
- 物理网络:真实硬件组成的网络,适合生产环境(如企业服务器)。
- 虚拟机:通过软件模拟的虚拟环境(如 VMware、VirtualBox),适合开发和测试(隔离环境、易于克隆)。
6.1.2 安装 OpenSSH
OpenSSH 是 Linux 下标准的安全远程登录协议,用于加密通信。
安装步骤
bash
sudo apt update # 更新软件源
sudo apt install openssh-server # 安装 SSH 服务
sudo systemctl start ssh # 启动 SSH 服务
sudo systemctl enable ssh # 设置开机自启
shell
bigdata@bigdata-virtual-machine:~$ sudo apt install openssh-server
[sudo] bigdata 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
将会同时安装下列软件:
ncurses-term openssh-sftp-server ssh-import-id
建议安装:
molly-guard monkeysphere ssh-askpass
下列【新】软件包将被安装:
ncurses-term openssh-server openssh-sftp-server ssh-import-id
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 9 个软件包未被升级。
需要下载 751 kB 的归档。
解压缩后会消耗 6,050 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 openssh-sftp-server amd64 1:8.9p1-3ubuntu0.13 [38.7 kB]
获取:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 openssh-server amd64 1:8.9p1-3ubuntu0.13 [435 kB]
获取:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 ncurses-term all 6.3-2ubuntu0.1 [267 kB]
获取:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 ssh-import-id all 5.11-0ubuntu1 [10.1 kB]
已下载 751 kB,耗时 2秒 (489 kB/s)
正在预设定软件包 ...
正在选中未选择的软件包 openssh-sftp-server。
(正在读取数据库 ... 系统当前共安装有 208935 个文件和目录。)
准备解压 .../openssh-sftp-server_1%3a8.9p1-3ubuntu0.13_amd64.deb ...
正在解压 openssh-sftp-server (1:8.9p1-3ubuntu0.13) ...
正在选中未选择的软件包 openssh-server。
准备解压 .../openssh-server_1%3a8.9p1-3ubuntu0.13_amd64.deb ...
正在解压 openssh-server (1:8.9p1-3ubuntu0.13) ...
正在选中未选择的软件包 ncurses-term。
准备解压 .../ncurses-term_6.3-2ubuntu0.1_all.deb ...
正在解压 ncurses-term (6.3-2ubuntu0.1) ...
正在选中未选择的软件包 ssh-import-id。
准备解压 .../ssh-import-id_5.11-0ubuntu1_all.deb ...
正在解压 ssh-import-id (5.11-0ubuntu1) ...
正在设置 openssh-sftp-server (1:8.9p1-3ubuntu0.13) ...
正在设置 openssh-server (1:8.9p1-3ubuntu0.13) ...
Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time ...
3072 SHA256:onfG1zUQon0a25Xnvjeebv9VQfR2rMu2w7gzbJkrkos root@bigdata-virtual-machine (RSA)
Creating SSH2 ECDSA key; this may take some time ...
256 SHA256:q7zoMGKG7GsN9t2NhCWcGGtahSTi4oyn7QhnsBqg+Q4 root@bigdata-virtual-machine (ECDSA)
Creating SSH2 ED25519 key; this may take some time ...
256 SHA256:iU8dirsuwgQwPJO1jbJH++KA3raYgpp7MV/i45TPVhA root@bigdata-virtual-machine (ED25519)
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
rescue-ssh.target is a disabled or a static unit, not starting it.
ssh.socket is a disabled or a static unit, not starting it.
正在设置 ssh-import-id (5.11-0ubuntu1) ...
正在设置 ncurses-term (6.3-2ubuntu0.1) ...
正在处理用于 man-db (2.10.2-1) 的触发器 ...
正在处理用于 ufw (0.36.1-4ubuntu0.1) 的触发器 ...
bigdata@bigdata-virtual-machine:~$
bigdata@bigdata-virtual-machine:~$ sudo systemctl start ssh # 启动 SSH 服务
bigdata@bigdata-virtual-machine:~$ sudo systemctl enable ssh
Synchronizing state of ssh.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ssh
配置文件(/etc/ssh/sshd_config)
关键配置项(需重启 SSH 服务生效):
bash
# 允许 root 登录(默认禁止,建议保留禁止)
PermitRootLogin no
# 允许密码认证(生产环境建议禁用,改用密钥认证)
PasswordAuthentication yes
# 监听端口(默认 22,可修改为其他端口增强安全性)
Port 22
6.1.3 安装 TightVNC(图形化远程桌面)
TightVNC 是轻量级远程桌面软件,支持跨平台(Linux/Windows)。
安装步骤
bash
sudo apt install tightvncserver # 安装 VNC 服务器
配置 VNC 密码
首次运行时会提示设置密码(用于客户端连接验证):
bash
vncserver :1 # 启动 VNC 服务(:1 表示第一个桌面)
防火墙配置(允许 VNC 端口)
bash
sudo ufw allow 5901/tcp # 允许 VNC 端口(5900 + 桌面编号,如 :1 对应 5901)
sudo ufw reload # 重载防火墙规则
6.2 安全的 Shell:SSH
6.2.1 为什么不使用 Telnet?
Telnet 采用明文传输 (包括密码),容易被窃听;而 SSH 通过加密通道传输数据,安全性更高。
6.2.2 从 Linux 登录另一台 Linux 服务器
基础用法
bash
ssh username@remote_ip # 远程登录(如 ssh ubuntu@192.168.1.100)
配置文件(~/.ssh/config)
简化频繁登录的主机配置:
bash
# 创建配置文件
nano ~/.ssh/config
# 添加主机别名(示例)
Host server1
HostName 192.168.1.100
User ubuntu
Port 22
之后可通过 ssh server1 快速登录。
6.2.3 从 Windows 登录 Linux
推荐使用图形化 SSH 工具,如:
- MobaXterm :集成了 SSH、SFTP、端口转发等功能(下载地址)。
- Xshell:专业 SSH 客户端(需付费,但有试用版)。
- WindTerm:开源跨平台终端(支持 SSH、串口等)。
6.2.4 登录 Windows 服务器
通过Remote Desktop Protocol(RDP) 登录 Windows,Linux 下可使用 rdesktop 工具:
bash
sudo apt install rdesktop # 安装 RDP 客户端
rdesktop -u windows_user -p password 192.168.1.200 # 登录 Windows 服务器
6.3 进阶:使用 SSH 密钥认证
6.3.1 为什么使用密钥?
密钥认证比密码更安全(避免暴力破解),且支持无密码登录(适合自动化脚本)。
6.3.2 生成密钥对
使用 ssh-keygen 生成 RSA 密钥对(公钥 + 私钥):
bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 生成 4096 位 RSA 密钥
过程说明
- 回车选择默认路径(
~/.ssh/id_rsa)。 - 设置 passphrase(密码,用于保护私钥,可留空直接回车)。
6.3.3 复制公钥至远程主机
将本地公钥(id_rsa.pub)复制到远程主机的 authorized_keys 文件(实现免密码登录):
bash
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_ip # 如 ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.1.100
手动复制(若 ssh-copy-id 不可用)
bash
cat ~/.ssh/id_rsa.pub | ssh username@remote_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
6.3.4 测试配置
bash
ssh username@remote_ip # 应直接登录,无需输入密码
6.3.5 密钥的安全性
-
保护私钥:设置文件权限(仅自己可读):
bashchmod 600 ~/.ssh/id_rsa -
使用 passphrase :若设置了 passphrase,需通过
ssh-agent缓存密钥(避免每次输入):basheval "$(ssh-agent -s)" # 启动密钥代理 ssh-add ~/.ssh/id_rsa # 添加私钥到代理
6.4 小结
本章介绍了 Ubuntu 远程登录的核心技术:
- SSH:标准安全协议,支持命令行和密钥认证。
- VNC:图形化远程桌面,适合需要 GUI 的场景。
- 密钥认证:比密码更安全,是实现自动化运维的关键。
建议生产环境中:
- 禁用 root 登录和密码认证,改用密钥认证。
- 配置防火墙规则(如 UFW)限制非法访问。
- 使用图形化工具(如 MobaXterm)简化多主机管理。
习题
- 在 Ubuntu 上安装 OpenSSH,并允许 root 用户通过密钥登录(需先设置 root 密码)。
- 配置 VNC 服务器,设置密码为
vnc123,并允许远程连接。 - 生成 SSH 密钥对,将公钥复制到远程主机
192.168.1.101(用户名test),测试免密码登录。 - 比较 SSH 和 Telnet 的安全性差异,说明为何生产环境不使用 Telnet。