所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 安全 虚拟服务器

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

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

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

1. 什么是 SSH 以及为什么它很重要?

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

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

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

如果您运行 VPS Hosting 计划或 Dedicated Server,SSH 几乎肯定是您日常管理的主要界面。

2. 前置条件

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

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

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

3. 如何通过 SSH 访问您的服务器

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

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

步骤 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 命令

连接后,您可以完全访问 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 配置

默认的 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 密钥是密码学密钥对——一个保存在本地机器上的私钥和一个存储在服务器上的公钥。认证通过证明你拥有私钥来工作,而无需传输它。这比密码安全得多。

第 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 安全传输文件
    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 客户端,FileZilla 或 Cyberduck 等工具可通过 SFTP 连接,并提供拖放界面 — 如果您不想使用命令行进行文件管理,这是理想选择。
    8. SSH 故障排除提示
    
    
    
    
    问题
    可能原因
    解决方案
    
    
    
    
    Connection refused
    SSH 未运行、端口错误或防火墙阻止
    检查 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 failures
    SSH 尝试了太多密钥
    明确指定密钥:ssh -i ~/.ssh/id_ed25519 user@host
    
    
    配置更改后被锁定
    SSH 配置错误
    使用您的托管提供商的应急/VNC 控制台修复 sshd_config
    
    
    
    
    启用详细模式进行调试
    排除连接问题时,将 -v(或 -vvv 以获得最大详细程度)添加到您的 SSH 命令:
    ssh -v username@your_server_ip
    这会输出有关握手过程的详细信息,帮助您精确定位连接失败的位置。
    9. 结论
    SSH 是远程服务器管理的基础。掌握它——从基本连接到基于密钥的身份验证和配置加固——是任何管理虚拟托管环境的人的基本技能。
    回顾关键最佳实践:
    
    ✅ 将默认 SSH 端口从 22 更改为非标准端口
    ✅ 禁用 root 登录并使用具有 sudo 权限的专用非 root 用户
    ✅ 使用 SSH 密钥身份验证而不是密码
    ✅ 配置密钥后禁用密码身份验证
    ✅ 保持 SSH 客户端和服务器软件更新
    ✅ 定期监控身份验证日志:tail -f /var/log/auth.log

    无论您运行的是带 cPanel 的 VPS还是管理裸机专用服务器,这些 SSH 实践都将保持您的环境安全并提高工作流效率。

    如果您正在寻找一个可靠的托管环境,具有完整的 SSH 访问权限和 root 控制权,请探索AlexHost VPS 托管——为开发人员、企业和各种需求设计的计划。如果您的基础设施需求扩展到域名的 SSL 安全,请不要忘记查看SSL 证书以保持您的网络流量端到端加密。

    *对 SSH 配置或服务器管理有疑问?AlexHost 支持团队全天候 24/7 可用,帮助您充分利用您的托管环境。*