OpenSSH 入门指南 – wiki词典

OpenSSH 入门指南

OpenSSH (Open Secure Shell) 是一个功能强大且广泛使用的开源工具套件,它提供了通过加密连接在计算机网络上进行安全通信的能力。作为安全 Shell (SSH) 协议的开源实现,OpenSSH 有效地防止了网络通信中的窃听、连接劫持和其他攻击,是远程管理服务器和安全传输文件的首选工具。

OpenSSH 概述

SSH 协议是 OpenSSH 的基础,它在客户端和服务器之间建立一个安全的、加密的通道。这意味着所有通过 SSH 传输的数据(包括登录凭据、命令输出和文件内容)都受到保护,不被未经授权的第三方访问。OpenSSH 不仅是 Linux 和 macOS 上的默认 SSH 客户端和服务器,也广泛支持 Windows 操作系统。

OpenSSH 主要提供以下功能:

  • 远程登录 (SSH):安全地连接到远程服务器并执行命令。
  • 远程文件传输 (SCP/SFTP):在本地和远程系统之间安全地复制文件和目录。
  • 端口转发 (Tunneling):创建安全隧道来转发网络流量。

安装 OpenSSH

根据您的操作系统,安装 OpenSSH 的方法略有不同。

Linux (以 Ubuntu/Debian 为例)

OpenSSH 客户端通常已预装。如果您需要安装 OpenSSH 服务器(用于允许其他机器连接到您的 Linux 系统),请使用以下命令:

bash
sudo apt update
sudo apt install openssh-server

安装完成后,SSH 服务 (sshd 守护进程) 通常会自动启动。您可以使用 systemctl status sshdpidof sshd 命令来验证服务状态。

macOS

OpenSSH 客户端和服务器在 macOS 上均已预装。您可以在“系统设置”>“共享”中启用“远程登录”来激活 SSH 服务器。

Windows

自 Windows 10 版本 1809 和 Windows Server 2019 起,OpenSSH 服务器已作为可选功能提供。

  • 安装 OpenSSH 服务器 (如果未安装)
    打开 PowerShell(以管理员身份运行),然后执行:
    “`powershell
    # 检查是否已安装
    Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’

    安装 OpenSSH 服务器

    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

    启动 SSH 服务

    Start-Service sshd

    配置 SSH 服务为自动启动

    Set-Service -Name sshd -StartupType Automatic
    “`

  • 配置防火墙: 允许 SSH 连接通过 Windows 防火墙:
    powershell
    New-NetFirewallRule -DisplayName "OpenSSH Server (Port 22)" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow -Program "C:\Windows\System32\OpenSSH\sshd.exe"

基本使用 (客户端)

远程登录

使用 ssh 命令连接到远程服务器:

“`bash
ssh [用户名]@[主机名或IP地址]

示例:以用户名为 ‘user’ 登录 IP 地址为 192.168.1.100 的服务器

ssh [email protected]

如果 SSH 服务器运行在非标准端口 (例如 2222)

ssh -p 2222 [email protected]
“`

首次连接到新的服务器时,SSH 客户端会提示您确认服务器的公钥指纹。确认后,该指纹会被存储在 ~/.ssh/known_hosts 文件中,以防止未来的中间人攻击。

执行远程命令

您可以在 ssh 命令后直接加上要在远程服务器上执行的命令:

“`bash
ssh user@hostname “要执行的命令”

示例:在远程服务器上查看内核版本

ssh [email protected] “uname -r”
“`

安全文件传输 (SCP)

scp 命令用于在本地和远程系统之间安全地复制文件或目录:

  • 从本地复制到远程
    bash
    scp /path/to/local/file user@hostname:/path/to/remote/directory
    # 示例:将本地的 my_document.txt 复制到远程服务器的 /home/user/documents 目录
    scp my_document.txt [email protected]:/home/user/documents/

  • 从远程复制到本地
    bash
    scp user@hostname:/path/to/remote/file /path/to/local/directory
    # 示例:将远程服务器的 /var/log/syslog 复制到本地的 /tmp 目录
    scp [email protected]:/var/log/syslog /tmp/

密钥认证

密钥认证比密码认证更安全,是推荐的认证方式。它使用一对密钥:公钥 (Public Key) 和私钥 (Private Key)。公钥存储在远程服务器上,私钥保存在本地客户端。

  1. 生成 SSH 密钥对
    使用 ssh-keygen 命令生成密钥对。推荐使用 ed25519 算法,它比 RSA 更安全、更高效。
    bash
    ssh-keygen -t ed25519 -C "[email protected]"

    此命令会提示您选择密钥保存路径(默认为 ~/.ssh/id_ed25519)和设置一个密码(强烈建议设置一个强密码来保护您的私钥)。
    生成后,您会在 ~/.ssh/ 目录下找到两个文件:id_ed25519 (私钥) 和 id_ed25519.pub (公钥)。

  2. 复制公钥到服务器
    使用 ssh-copy-id 命令将您的公钥安全地复制到远程服务器。这将允许您无需密码即可登录。
    bash
    ssh-copy-id [用户名]@[主机名或IP地址]
    # 示例:
    ssh-copy-id [email protected]

    ssh-copy-id 会自动将您的公钥添加到远程服务器用户的 ~/.ssh/authorized_keys 文件中,并设置正确的权限。

  3. 使用 ssh-agent
    ssh-agent 是一个在内存中缓存私钥的程序,这样您就不必在每次 SSH 连接时都输入私钥密码。
    bash
    eval "$(ssh-agent -s)" # 启动 ssh-agent
    ssh-add ~/.ssh/id_ed25519 # 添加您的私钥

    如果您设置了私钥密码,ssh-add 会要求您输入一次密码。此后,只要 ssh-agent 运行,您就可以无需密码地使用该私钥进行认证。

OpenSSH 服务器配置

OpenSSH 服务器的主要配置文件是 sshd_config
* 在 Linux 上,通常位于 /etc/ssh/sshd_config
* 在 Windows 上,通常位于 %programdata%\ssh\sshd_config

修改配置文件后,务必重启 SSH 服务以使更改生效:
* Linuxsudo systemctl restart sshd
* WindowsRestart-Service sshd

一些重要的配置选项及其安全建议:

  • Port 22:SSH 服务监听的端口。建议更改为非标准端口 (例如 Port 2222),以减少自动扫描攻击。
  • PermitRootLogin no禁用 root 用户直接登录。这是一个重要的安全措施。您应该以普通用户登录,然后再通过 sudo 切换到 root。
  • PasswordAuthentication no禁用密码认证。强制使用更安全的密钥认证。在启用此项之前,请确保您的密钥认证已正常工作。
  • PubkeyAuthentication yes:启用公钥认证。
  • PermitEmptyPasswords no:禁止使用空密码。
  • Protocol 2:只允许使用 SSH 协议版本 2(更安全)。
  • MaxAuthTries 3:限制每次连接的最大认证尝试次数,防止暴力破解。
  • LoginGraceTime 30:限制用户在登录提示符下输入凭据的时间。
  • AllowUsers user1 user2:明确指定允许登录的用户列表,进一步限制访问。

安全最佳实践

为了最大限度地提高 OpenSSH 的安全性,请遵循以下最佳实践:

  1. 禁用 Root 登录:始终通过普通用户登录,然后使用 sudo 提升权限。
  2. 强制使用密钥认证:禁用密码认证,并为您的私钥设置一个强密码。
  3. 使用强密码保护私钥:私钥密码是抵御私钥被盗用的最后一道防线。
  4. 更改默认 SSH 端口:将 SSH 端口从默认的 22 更改为其他不常用的端口。
  5. 配置防火墙:限制只有特定 IP 地址或网络才能访问 SSH 端口。
  6. 定期更新 OpenSSH:及时安装最新的安全补丁,以修复已知漏洞。
  7. 限制用户访问:使用 AllowUsersAllowGroups 等配置项,只允许特定用户或组通过 SSH 登录。
  8. 监控日志:定期检查 SSH 日志 (/var/log/auth.logEvent Viewer for Windows) 以检测异常活动。

结论

OpenSSH 是现代网络环境中不可或缺的安全工具。通过理解其基本原理、正确安装和配置,并遵循安全最佳实践,您可以确保您的远程连接和数据传输始终处于加密保护之下,从而大大增强您的系统安全性。掌握 OpenSSH 的使用,是每个系统管理员和开发者必备的技能。

滚动至顶部