Ubuntu SSH安装教程:远程连接服务器指南
SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络上安全地执行网络服务。它提供了强大的身份验证和加密机制,确保了数据传输的机密性和完整性。对于管理远程Ubuntu服务器而言,SSH是不可或缺的工具。
本文将详细介绍如何在Ubuntu服务器上安装和配置OpenSSH服务,并从客户端进行安全连接。
目录
- 什么是SSH?为什么使用它?
- 环境准备
- 步骤一:更新系统软件包
- 步骤二:安装OpenSSH Server
- 步骤三:配置防火墙 (UFW)
- 步骤四:验证SSH服务状态
- 步骤五:从客户端连接到服务器
- Linux/macOS
- Windows (使用PuTTY或WSL)
- 步骤六 (推荐):配置SSH密钥认证
- 生成SSH密钥对
- 将公钥复制到服务器
- 禁用密码认证 (提高安全性)
- 步骤七 (可选):更改SSH默认端口
- 总结
1. 什么是SSH?为什么使用它?
SSH是一种允许用户安全地访问和管理远程计算机的协议。它通过加密技术,在客户端和服务器之间创建一个安全的通道,所有传输的数据(包括密码和命令)都将经过加密,从而防止窃听和篡改。
为什么使用SSH?
- 安全性高:数据传输加密,防止敏感信息泄露。
- 远程管理:可以在任何有网络连接的地方管理你的服务器。
- 文件传输:除了命令行访问,SSH还支持安全的文件传输(如SCP和SFTP)。
- 端口转发:允许通过加密通道转发其他网络服务。
2. 环境准备
在开始之前,请确保你具备以下条件:
- 一台运行Ubuntu Server的远程服务器(或虚拟机),并且你拥有其root或具有sudo权限的用户账户。
- 服务器需要有互联网连接,以便下载软件包。
- 一台用于连接服务器的本地计算机(客户端)。
3. 步骤一:更新系统软件包
在安装任何新软件之前,始终建议更新你的服务器。这可以确保你安装的是最新版本的软件包,并修复潜在的安全漏洞。
在你的Ubuntu服务器上打开终端,运行以下命令:
bash
sudo apt update
sudo apt upgrade -y
sudo apt update 会更新可用软件包的列表,而 sudo apt upgrade -y 会将所有已安装的软件包升级到最新版本,-y 选项会自动确认所有提示。
4. 步骤二:安装OpenSSH Server
Ubuntu通常默认没有安装OpenSSH Server,但客户端工具(ssh 命令)通常是预装的。要允许远程连接到你的Ubuntu服务器,你需要安装 openssh-server 包。
在服务器上运行以下命令:
bash
sudo apt install openssh-server -y
安装完成后,SSH服务通常会自动启动。
5. 步骤三:配置防火墙 (UFW)
为了服务器的安全,强烈建议启用并配置防火墙。Ubuntu默认使用UFW (Uncomplicated Firewall)。你需要允许SSH连接通过防火墙。
首先,检查UFW的状态:
bash
sudo ufw status
如果UFW是 inactive(未激活),你需要先启用它。在启用之前,务必允许SSH,否则你可能会将自己锁在服务器外面。
允许SSH连接:
SSH默认使用TCP端口22。
bash
sudo ufw allow OpenSSH
或者,更具体地允许端口22:
bash
sudo ufw allow 22/tcp
启用UFW (如果未启用):
bash
sudo ufw enable
系统会提示你这可能会中断现有的SSH连接,输入 y 并回车确认。
再次检查UFW状态:
bash
sudo ufw status
你应该看到 Status: active 并且 OpenSSH (或 22/tcp) 被列为 ALLOW。
“`
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
“`
6. 步骤四:验证SSH服务状态
确认OpenSSH服务正在运行。
bash
sudo systemctl status ssh
如果服务正在运行,你将看到类似以下输出:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2025-12-31 10:00:00 UTC; 5min ago
Docs: man:sshd(8)
man:ssh(1)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 4679)
Memory: 5.6M
CPU: 42ms
CGroup: /system.slice/ssh.service
└─1234 /usr/sbin/sshd -D
如果服务没有运行,你可以手动启动它:
bash
sudo systemctl start ssh
如果希望SSH在系统启动时自动运行,确保它已启用:
bash
sudo systemctl enable ssh
7. 步骤五:从客户端连接到服务器
现在OpenSSH Server已在你的Ubuntu服务器上运行,你可以从本地计算机连接到它。你需要知道服务器的IP地址或主机名。
你可以通过在服务器上运行以下命令获取IP地址:
bash
ip a | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -n 1
假设服务器IP地址为 your_server_ip,你的用户名是 your_username。
从 Linux / macOS 客户端连接
打开终端,使用 ssh 命令:
bash
ssh your_username@your_server_ip
例如:
bash
ssh [email protected]
- 第一次连接时,系统会提示你确认服务器的真实性,输入
yes并回车。服务器的指纹将被添加到你的~/.ssh/known_hosts文件中。 - 然后输入你的用户密码。
- 成功登录后,你将看到服务器的命令行提示符。
从 Windows 客户端连接
方法一:使用PuTTY
- 下载并安装PuTTY:https://www.putty.org/
- 打开PuTTY。
- 在 “Host Name (or IP address)” 字段中输入
your_server_ip。 - 确保 “Port” 是
22。 - 在 “Connection type” 中选择
SSH。 - 你可以给这个会话一个名字并点击 “Save” 以便下次快速加载。
- 点击 “Open”。
- 如果第一次连接,会出现安全警告,点击 “Accept”。
- 在弹出的终端窗口中,输入你的
your_username,然后输入密码。
方法二:使用Windows Subsystem for Linux (WSL)
如果你已安装WSL,可以直接在WSL终端中使用与Linux/macOS相同的方法连接:
- 打开WSL终端。
- 运行
ssh your_username@your_server_ip命令。 - 输入密码。
8. 步骤六 (推荐):配置SSH密钥认证
使用SSH密钥对进行认证比密码认证更安全、更便捷,因为它消除了暴力破解密码的风险。
8.1 生成SSH密钥对 (在本地客户端执行)
在你的本地计算机(Linux/macOS终端或Windows WSL终端)上,运行以下命令生成密钥对:
bash
ssh-keygen -t rsa -b 4096
-t rsa指定密钥类型为RSA。-b 4096指定密钥长度为4096位(更安全)。- 系统会提示你保存密钥的路径(默认通常是
~/.ssh/id_rsa),可以直接按回车接受默认值。 - 系统会提示你输入一个密码(passphrase)。这是一个额外的安全层,即使私钥被盗,没有密码也无法使用。强烈建议设置一个。
这会在 ~/.ssh/ 目录下生成两个文件:
* id_rsa:你的私钥 (绝对不能分享给任何人!)
* id_rsa.pub:你的公钥
8.2 将公钥复制到服务器 (在本地客户端执行)
使用 ssh-copy-id 命令将你的公钥复制到服务器:
bash
ssh-copy-id your_username@your_server_ip
- 系统会要求你输入
your_username的密码。 ssh-copy-id会自动将你的公钥添加到服务器上~/.ssh/authorized_keys文件中。
如果 ssh-copy-id 不可用或你使用的是Windows上的PuTTY,你需要手动复制公钥内容:
- 在本地打开
id_rsa.pub文件,复制其所有内容。- Linux/macOS:
cat ~/.ssh/id_rsa.pub
- Linux/macOS:
- 通过密码连接到服务器。
- 在服务器上创建或编辑
~/.ssh/authorized_keys文件。确保~/.ssh目录及其内容只有所有者有读写权限。
bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys - 将你的公钥内容粘贴到
authorized_keys文件中,并保存。 - 设置
authorized_keys文件的权限:
bash
chmod 600 ~/.ssh/authorized_keys
现在,尝试使用SSH密钥登录,无需密码:
bash
ssh your_username@your_server_ip
如果设置了密钥密码,会提示你输入该密码。
8.3 禁用密码认证 (提高安全性)
一旦你确认SSH密钥认证可以正常工作,为了进一步提高服务器安全性,你可以禁用密码认证。
在服务器上,编辑SSH配置文件:
bash
sudo nano /etc/ssh/sshd_config
找到以下行并进行修改(如果被注释,请取消注释并修改):
“`
PermitRootLogin prohibit-password # 推荐禁用root直接登录
PasswordAuthentication no
“`
注意:PermitRootLogin 建议设置为 prohibit-password (允许密钥认证但禁止密码) 或 no (完全禁止root登录)。如果你需要root权限,可以通过普通用户登录后使用 sudo -i 或 sudo su。
保存并关闭文件 (Ctrl+O, Enter, Ctrl+X)。
重启SSH服务以应用更改:
bash
sudo systemctl restart ssh
现在,任何尝试通过密码登录服务器的请求都将被拒绝,只能通过SSH密钥进行认证。
9. 步骤七 (可选):更改SSH默认端口
将SSH服务从默认的22端口更改为其他端口,可以减少来自自动化扫描和攻击的尝试(但这并不能阻止有针对性的攻击)。
在服务器上,编辑SSH配置文件:
bash
sudo nano /etc/ssh/sshd_config
找到 Port 22 这一行,并将其更改为其他未使用的端口号(例如,2222):
Port 2222
保存并关闭文件。
重要:更新防火墙规则!
如果你更改了SSH端口,必须在UFW中允许新端口,并删除旧端口的规则。
“`bash
sudo ufw allow 2222/tcp # 允许新端口
sudo ufw delete allow OpenSSH # 删除旧的OpenSSH规则(如果之前用了这个)
或者如果你之前明确允许了端口22:
sudo ufw delete allow 22/tcp # 删除旧的22端口规则
“`
重启SSH服务:
bash
sudo systemctl restart ssh
从客户端连接时,你需要指定新端口:
bash
ssh -p 2222 your_username@your_server_ip
10. 总结
通过本教程,你已经成功在Ubuntu服务器上安装并配置了OpenSSH服务,并学习了如何从客户端进行连接。为了确保服务器的安全,强烈建议启用防火墙、使用SSH密钥认证,并考虑禁用密码认证和更改默认SSH端口。
现在,你可以安全高效地远程管理你的Ubuntu服务器了!