Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04的远程登录(6)

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 密钥的安全性

  • 保护私钥:设置文件权限(仅自己可读):

    bash 复制代码
    chmod 600 ~/.ssh/id_rsa
  • 使用 passphrase :若设置了 passphrase,需通过 ssh-agent 缓存密钥(避免每次输入):

    bash 复制代码
    eval "$(ssh-agent -s)"  # 启动密钥代理
    ssh-add ~/.ssh/id_rsa   # 添加私钥到代理

6.4 小结

本章介绍了 Ubuntu 远程登录的核心技术:

  • SSH:标准安全协议,支持命令行和密钥认证。
  • VNC:图形化远程桌面,适合需要 GUI 的场景。
  • 密钥认证:比密码更安全,是实现自动化运维的关键。

建议生产环境中:

  • 禁用 root 登录和密码认证,改用密钥认证。
  • 配置防火墙规则(如 UFW)限制非法访问。
  • 使用图形化工具(如 MobaXterm)简化多主机管理。

习题

  1. 在 Ubuntu 上安装 OpenSSH,并允许 root 用户通过密钥登录(需先设置 root 密码)。
  2. 配置 VNC 服务器,设置密码为 vnc123,并允许远程连接。
  3. 生成 SSH 密钥对,将公钥复制到远程主机 192.168.1.101(用户名 test),测试免密码登录。
  4. 比较 SSH 和 Telnet 的安全性差异,说明为何生产环境不使用 Telnet。
相关推荐
TimberWill5 小时前
MinIO整合SpringBoot实现获取文件夹目录结构及文件内容
java·linux·springboot
YJlio5 小时前
文件工具学习笔记(12.8):MoveFile 实战——重启后重命名/删除顽固文件
笔记·学习·计算机外设
Damon_X5 小时前
OpenGL相关学习
学习
2401_865854885 小时前
服务器的windows和Linux系统有什么区别
linux·运维·服务器
云飞云共享云桌面5 小时前
SolidWorks服务器怎么实现研发软件多人共享、数据安全管理
java·linux·运维·服务器·数据库·自动化
式5165 小时前
大模型学习基础(六) 强化学习(Reinforcement Learning,RL)初步1.3
学习
AOwhisky5 小时前
用户、用户组管理
linux·运维·运维开发
学Linux的语莫5 小时前
k8s知识点整体概览
java·linux·kubernetes
关于不上作者榜就原神启动那件事5 小时前
Redis学习笔记
redis·笔记·学习