15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
01.11.2024

SSH on Virtual Hosting: The Complete Guide to Secure Server Management

安全外壳 (SSH) 是任何系统管理员工具库中最强大和最必要的工具之一。无论您是在管理小型个人项目还是运行生产 Web 应用程序,SSH 都能为您提供加密、经过身份验证的远程服务器访问 — 让您可以执行命令、传输文件和配置服务,而无需接触物理机器。

本综合指南涵盖了在虚拟主机环境中使用 SSH 所需了解的所有内容:从首次连接到强化设置以防止暴力攻击。

目录

  1. 什么是 SSH 以及为什么重要?
  2. 连接前的先决条件
  3. 如何通过 SSH 访问您的服务器
  4. 用于服务器管理的基本 SSH 命令
  5. 强化您的 SSH 配置
  6. SSH 密钥身份验证:正确的登录方式
  7. 使用 SCP 和 SFTP 安全传输文件
  8. SSH 故障排除提示
  9. 结论

1. 什么是 SSH 以及为什么重要? {#what-is-ssh}

SSH(安全外壳)是一种加密网络协议,可在您的本地机器(客户端)和远程服务器之间创建加密隧道。与 Telnet 或 FTP 等较旧的协议不同,SSH 加密所有流量 — 包括凭据 — 使攻击者几乎不可能在传输过程中拦截敏感数据。

SSH 是以下方面的标准方法:

  • 远程命令行访问 — 在您的服务器上运行任何 Linux/Unix 命令,就像您坐在它前面一样
  • 安全文件传输 — 使用 SCP 或 SFTP 在机器之间移动文件
  • 隧道和端口转发 — 通过 SSH 连接安全地路由其他协议
  • 自动化部署和脚本 — CI/CD 管道、cron 作业和备份脚本都依赖于 SSH
  • 管理 Web 服务器和应用程序 — 配置 Nginx、Apache、MySQL 等

如果您运行的是 VPS 主机计划或 专用服务器,SSH 几乎肯定是您日常管理的主要界面。

2. 连接前的先决条件 {#prerequisites}

在建立首次 SSH 连接之前,请确保您具有以下内容:

要求详情
服务器 IP 地址在您的主机控制面板或欢迎电子邮件中提供
SSH 用户名对于新鲜 VPS 通常为 root,或在托管环境中为自定义用户
SSH 密码或密钥在配置期间设置或通过电子邮件发送
SSH 客户端内置于 Linux/macOS;Windows 上为 PuTTY 或 Windows 终端
SSH 端口默认为 22,但可能会为了安全而自定义

> 注意:如果您使用的是 共享 Web 主机计划,SSH 访问可能受到限制或需要在控制面板中明确激活。请与您的提供商联系。

3. 如何通过 SSH 访问您的服务器 {#accessing-via-ssh}

步骤 1:打开您的终端或 SSH 客户端

  • Linux / macOS:打开内置的终端应用程序
  • Windows 10/11:使用 Windows 终端、PowerShell 或命令提示符(都包含本机 SSH 客户端)
  • Windows(旧版):下载 PuTTY 作为免费 SSH 客户端

步骤 2:连接到您的服务器

使用以下语法:

ssh username@your_server_ip

示例:

ssh root@203.0.113.45

如果您的服务器使用非标准端口(稍后会详细介绍为什么应该更改它),请使用 -p 标志指定它:

ssh username@your_server_ip -p 2222

步骤 3:验证主机指纹

首次连接到新服务器时,SSH 将显示如下消息:

The authenticity of host '203.0.113.45 (203.0.113.45)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入 yes 并按 Enter。SSH 将服务器的指纹保存到您的 ~/.ssh/known_hosts 文件。在将来的连接中,它将自动验证服务器的身份 — 如果有任何变化,将向您发出警报(这可能表示中间人攻击)。

步骤 4:身份验证

出现提示时输入您的密码。请注意,终端在您输入时不会显示任何字符 — 这是出于安全原因的正常行为。

身份验证后,您将看到服务器的命令提示符,通常类似于:

root@hostname:~#

您现在已连接,可以开始管理您的服务器。

4. 用于服务器管理的基本 SSH 命令 {#essential-commands}

连接后,您可以完全访问 Linux 命令行。以下是用于管理虚拟主机环境的最重要命令:

文件和目录操作

# List files and directories with details
ls -la

# Change to a specific directory
cd /var/www/html

# Create a new directory
mkdir my_project

# Remove a file
rm filename.txt

# Remove a directory and its contents
rm -rf /path/to/directory

# Copy a file
cp source.txt destination.txt

# Move or rename a file
mv oldname.txt newname.txt

查看和编辑文件

# View file contents
cat /etc/nginx/nginx.conf

# View large files page by page
less /var/log/nginx/access.log

# Edit a file with nano (beginner-friendly)
nano /etc/ssh/sshd_config

# Edit a file with vim (advanced)
vim /etc/nginx/sites-available/default

系统监控

# Check disk usage (human-readable)
df -h

# Check memory usage
free -m

# Real-time process monitor
top

# Enhanced process monitor (install if needed)
htop

# Check running services
systemctl status nginx

# View recent system logs
journalctl -xe

包管理 (Ubuntu/Debian)

# Update package list
sudo apt update

# Upgrade installed packages
sudo apt upgrade -y

# Install a package
sudo apt install package-name

# Remove a package
sudo apt remove package-name

网络诊断

# Check open ports and listening services
ss -tulnp

# Test connectivity to a host
ping google.com

# Trace the network route to a host
traceroute google.com

# Check your server's public IP
curl ifconfig.me

5. 强化您的 SSH 配置 {#hardening-ssh}

默认 SSH 配置在功能上是可行的,但在安全性方面并不是最优的。由于 SSH 暴露在互联网上,它是自动暴力攻击的持续目标。以下步骤显著减少了您的攻击面。

所有更改都在 SSH 守护进程配置文件中进行:

sudo nano /etc/ssh/sshd_config

进行任何更改后,始终重新加载 SSH 服务:

sudo systemctl reload sshd

> ⚠️ 关键警告:在对 SSH 配置进行更改之前,始终保持第二个终端会话打开并连接。如果您错误配置 SSH 并失去访问权限,您可能需要使用您的主机提供商的应急控制台来恢复。

步骤 1:更改默认 SSH 端口

端口 22 是默认 SSH 端口,不断被自动机器人扫描。将其更改为高的、非标准的端口不会阻止坚定的攻击者,但会大大减少来自自动扫描的噪音。

/etc/ssh/sshd_config 中,找到并修改:

# Before:
#Port 22

# After:
Port 2222

删除 # 以取消注释该行,并设置您选择的端口(使用 1024 到 65535 之间的任何未使用的数字)。

重要:如果您运行防火墙(您应该运行),请在重新加载 SSH 之前允许新端口:

# UFW (Ubuntu/Debian)
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp

# firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

步骤 2:禁用 Root 登录

直接以 root 身份通过 SSH 登录是一个重大的安全风险。相反,创建一个常规用户帐户并使用 sudo 进行管理任务。

/etc/ssh/sshd_config 中:

# Before:
PermitRootLogin yes

# After:
PermitRootLogin no

禁用 root 登录之前,请确保您已:

  1. 创建了非 root 用户:adduser myuser
  2. 授予 sudo 权限:usermod -aG sudo myuser
  3. 验证您可以在单独的会话中以该用户身份登录

步骤 3:限制登录尝试

添加这些指令以减少暴力破解的有效性:

# Maximum authentication attempts per connection
MaxAuthTries 3

# Maximum concurrent unauthenticated connections
MaxStartups 10:30:60

# Disconnect idle sessions after 5 minutes
ClientAliveInterval 300
ClientAliveCountMax 2

步骤 4:将 SSH 访问限制为特定用户

如果只有某些用户需要 SSH 访问,请明确将其列入白名单:

AllowUsers myuser deployuser

步骤 5:禁用密码身份验证(设置 SSH 密钥后)

配置 SSH 密钥身份验证后(请参阅下一部分),完全禁用基于密码的登录:

PasswordAuthentication no
ChallengeResponseAuthentication no

这个单一的更改消除了整个密码暴力攻击类别。

6. SSH 密钥身份验证:正确的登录方式 {#ssh-key-authentication}

SSH 密钥是加密密钥对 — 保留在本地机器上的私钥和驻留在服务器上的公钥。身份验证的工作原理是证明您拥有私钥,而无需传输它。这比密码安全得多。

步骤 1:生成 SSH 密钥对

在您的 本地机器上运行此命令(不是服务器):

ssh-keygen -t ed25519 -C "your_email@example.com"

> 为什么是 Ed25519?它比较旧的 RSA 算法更快、更安全。如果您的系统不支持它,请改用 ssh-keygen -t rsa -b 4096

系统将提示您:

  • 选择文件位置 — 按 Enter 接受默认值(~/.ssh/id_ed25519
  • 设置密码短语 — 强烈推荐;这会加密您的私钥,使其在被盗时无用

这会创建两个文件:

  • ~/.ssh/id_ed25519 — 您的 私钥(永远不要共享)
  • ~/.ssh/id_ed25519.pub — 您的 公钥(这放在服务器上)

步骤 2:将公钥复制到您的服务器

最简单的方法:

ssh-copy-id username@your_server_ip

或手动,如果 ssh-copy-id 不可用:

# On your local machine, display your public key:
cat ~/.ssh/id_ed25519.pub

# On the server, add it to the authorized keys file:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key_content" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

步骤 3:使用您的 SSH 密钥连接

# Standard port
ssh username@your_server_ip

# Custom port
ssh username@your_server_ip -p 2222

SSH 将自动使用您的密钥。如果您设置了密码短语,系统会提示您输入(这是您的本地密码短语,而不是您的服务器密码)。

步骤 4:使用 SSH 配置文件简化连接

如果您管理多个服务器,请创建 SSH 配置文件以避免输入长命令:

nano ~/.ssh/config

添加如下条目:

Host myserver
    HostName 203.0.113.45
    User myuser
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host staging
    HostName 203.0.113.100
    User deploy
    Port 22
    IdentityFile ~/.ssh/id_ed25519

现在您可以简单地连接:

ssh myserver

7. 使用 SCP 和 SFTP 安全传输文件 {#file-transfers}

SSH 支持两种安全文件传输方法:SCP(安全复制协议)用于快速传输,SFTP(SSH 文件传输协议)用于交互式会话。

SCP — 快速文件传输

将文件从本地机器复制到服务器:

scp /path/to/local/file.txt username@your_server_ip:/path/to/remote/directory/

将文件从服务器复制到本地机器:

scp username@your_server_ip:/path/to/remote/file.txt /path/to/local/directory/

递归复制整个目录:

scp -r /path/to/local/folder username@your_server_ip:/path/to/remote/

使用自定义端口:

scp -P 2222 file.txt username@your_server_ip:/destination/

> 注意:SCP 使用 -P(大写)表示端口,与 SSH 使用 -p(小写)不同。

SFTP — 交互式文件管理

SFTP 提供交互式 shell 来浏览和管理远程文件:

sftp username@your_server_ip

连接后,使用这些命令:

# List remote files
ls

# List local files
lls

# Change remote directory
cd /var/www/html

# Change local directory
lcd ~/Downloads

# Upload a file
put localfile.txt

# Download a file
get remotefile.txt

# Exit
bye

对于图形 SFTP 客户端,FileZillaCyberduck 等工具通过 SFTP 连接并提供拖放界面 — 如果您不喜欢使用命令行进行文件管理,这是理想的选择。

8. SSH 故障排除提示 {#troubleshooting}

问题可能的原因解决方案
Connection refusedSSH 未运行、端口错误或防火墙阻止检查 systemctl status sshd、验证端口、检查防火墙规则
Connection timed out防火墙阻止连接验证防火墙规则允许您的 SSH 端口
Permission denied (publickey)密钥错误、用户错误或密钥未授权检查 ~/.ssh/authorized_keys 权限;验证正在使用正确的密钥
Host key verification failed服务器指纹已更改删除旧条目:ssh-keygen -R your_server_ip
Too many authentication failuresSSH
15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用