远程管理Linux服务器的第一步是确保登录安全高效,这不仅提升工作效率,更是守护服务器安全的关键防线,掌握正确的登录方法和最佳实践至关重要。
核心登录方式:SSH (Secure Shell)
SSH是登录Linux服务器的行业标准协议,它通过加密通道传输所有数据,有效防止窃听和中间人攻击。
使用密码登录 (基础但需谨慎)
- 打开终端 (Linux/macOS) 或 SSH 客户端 (Windows):
- Linux/macOS: 直接打开系统自带的终端 (Terminal)。
- Windows: 使用 PuTTY, Windows Terminal, MobaXterm 或较新 Windows 10/11 内置的 OpenSSH 客户端 (在 PowerShell 或命令提示符中使用
ssh
命令)。
- 执行登录命令:
ssh username@server_ip_address
- 将
username
替换为你在服务器上的实际用户名 (如ubuntu
,ec2-user
,root
或自定义名)。 - 将
server_ip_address
替换为服务器的公网 IP 地址或域名 (如0.113.10
或yourdomain.com
)。
- 将
- 首次连接确认:
首次连接某台服务器时,会提示你确认服务器的指纹 (类似于服务器的唯一身份证),仔细核对指纹 (如果服务器提供商如阿里云、酷盾、AWS等提供了指纹信息) 后,输入yes
确认并继续。 - 输入密码:
系统提示username@server_ip_address's password:
时,安全地输入该用户对应的密码,输入时屏幕上通常不会显示任何字符(星号也没有),这是正常的安全设计,输入完毕按回车。 - 登录成功:
密码验证通过后,你将看到服务器的命令行提示符 (如username@hostname:~$
),表示已成功登录。
密码登录的安全风险与建议:
- 风险: 密码可能被暴力破解或猜测。
- 最佳实践:
- 使用强密码: 长度至少12位,包含大小写字母、数字、特殊符号,避免常见词汇。
- 禁用 root 密码登录: 绝大多数情况下,应禁止直接使用
root
用户通过密码登录,使用普通用户登录后,再用sudo
提权执行管理任务。 - 考虑密钥登录: 更安全的方式是使用 SSH 密钥对登录(强烈推荐)。
使用 SSH 密钥对登录 (更安全,推荐)
- 原理: 使用一对加密密钥(公钥和私钥),公钥放在服务器上,私钥安全地保存在你的本地计算机上,登录时,本地 SSH 客户端用私钥签名一个挑战信息发送给服务器,服务器用存储的公钥验证签名,验证通过则允许登录。
- 优势: 比密码安全得多(几乎无法暴力破解),无需记忆复杂密码,支持自动化脚本。
- 步骤:
- 在本地计算机生成密钥对 (如果还没有):
ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐使用 Ed25519 算法 # 或 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 使用 RSA 算法,4096位更安全
按提示操作(通常直接回车接受默认保存路径
~/.ssh/id_ed25519
或~/.ssh/id_rsa
,并设置一个强密码短语passphrase
来加密保护私钥)。 - 将公钥上传到服务器:
- 方法一 (推荐 – 使用
ssh-copy-id
):ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip_address
输入服务器用户的密码后,公钥会自动添加到服务器用户家目录下的
~/.ssh/authorized_keys
文件中。 - 方法二 (手动):
- 在本地查看公钥内容:
cat ~/.ssh/id_ed25519.pub
(或id_rsa.pub
)。 - 复制输出的全部内容。
- 登录到服务器 (先用密码登录或其他方式)。
- 确保
~/.ssh
目录存在且权限正确:mkdir -p ~/.ssh chmod 700 ~/.ssh
- 将复制的公钥内容追加到
~/.ssh/authorized_keys
文件:echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
- 设置
authorized_keys
文件权限:chmod 600 ~/.ssh/authorized_keys
- 在本地查看公钥内容:
- 方法一 (推荐 – 使用
- 使用密钥登录:
执行和密码登录相同的命令:ssh username@server_ip_address
- 如果私钥路径和文件名是默认的 (
id_ed25519
或id_rsa
),SSH 会自动尝试使用它。 - 如果生成密钥时设置了
passphrase
,系统会提示你输入它来解锁私钥(这是本地操作,密码不会发送到服务器)。 - 如果密钥文件名不是默认的,需要用
-i
指定:ssh -i /path/to/your/private_key username@server_ip_address
- 如果私钥路径和文件名是默认的 (
- 在本地计算机生成密钥对 (如果还没有):
- 禁用密码登录 (增强安全 – 密钥配置好后进行):
强烈建议在成功配置并测试密钥登录后,禁用服务器的密码登录功能:- 登录服务器。
- 编辑 SSH 服务端配置文件 (
/etc/ssh/sshd_config
):sudo nano /etc/ssh/sshd_config # 或使用 vi/vim
- 找到以下行并修改:
PasswordAuthentication no # 确保是 no #PubkeyAuthentication yes # 通常默认是 yes,确保没有被注释掉 #PermitRootLogin prohibit-password # 或 no (更安全) 或 without-password (仅密钥)
- 保存文件并退出编辑器。
- 重启 SSH 服务使配置生效:
sudo systemctl restart sshd # 大多数现代系统 # 或 sudo service ssh restart # 一些旧系统
重要: 在禁用密码登录前,务必确保你的密钥登录100% 工作正常,并且你有其他访问途径(如控制台)以防万一。
指定端口登录
SSH 默认监听 22 端口,为增加安全性,可以修改服务器上的 SSH 端口号。
- 登录命令 (带端口):
ssh -p port_number username@server_ip_address
- 将
port_number
替换为服务器 SSH 实际监听的端口号 (如2222
)。
- 将
- 修改服务器端口:
编辑/etc/ssh/sshd_config
,找到#Port 22
行,去掉注释 并将22
改为你想要的端口号 (如Port 2222
),保存后重启sshd
服务。务必确保防火墙允许新端口通过!
其他登录方式 (特定场景)
-
控制台/串行控制台 (Console/Serial Console):
- 场景: 当服务器网络完全不可用、SSH 服务崩溃或需要底层访问时(如云服务器提供商 VNC、阿里云/酷盾/AWS 的实例控制台)。
- 方法: 通过云服务商的管理控制台访问,通常需要浏览器登录云平台,找到对应实例,点击“连接”、“VNC”、“串行控制台”等选项,可能需要输入服务器本地账户的用户名和密码。
- 特点: 不依赖服务器网络配置和 SSH 服务状态,是最后的救命稻草。
-
基于 Web 的 SSH 客户端:
- 场景: 某些服务器管理面板(如 cPanel, Plesk, 宝塔面板)或云平台(如 AWS CloudShell, Google Cloud Shell)提供内置的 Web Shell。
- 方法: 登录到相应的管理界面,找到 Web Shell 或终端功能入口点击进入。
- 特点: 无需安装本地客户端,方便临时访问,但功能、体验和安全性可能不如本地 SSH 客户端。
常用 SSH 客户端工具
- Linux/macOS: 内置 OpenSSH 客户端 (
ssh
命令)。 - Windows:
- PuTTY: 经典免费工具,轻量级。
- Windows Terminal (推荐): 微软官方现代化终端,集成 PowerShell, CMD, WSL, SSH 等,体验优秀。
- MobaXterm: 功能强大的全能终端,集成了 SSH, X11 服务器, SFTP 浏览器等。
- OpenSSH for Windows (内置): Windows 10 (1809+) 和 Windows 11 已内置 OpenSSH 客户端,可在 PowerShell 或 CMD 中直接使用
ssh
命令。
登录后的重要安全操作
- 更新系统:
sudo apt update && sudo apt upgrade # Debian/Ubuntu sudo yum update # CentOS/RHEL (较旧) sudo dnf upgrade # CentOS Stream/RHEL 8+/Fedora
- 创建普通用户 (如果使用 root 登录):
adduser newusername usermod -aG sudo newusername # Debian/Ubuntu 赋予 sudo 权限 usermod -aG wheel newusername # CentOS/RHEL 赋予 sudo 权限 (需 wheel 组在 sudoers 中配置)
- 配置防火墙 (如
ufw
或firewalld
): 只允许必要的端口 (SSH, HTTP/HTTPS 等)。
常见登录问题排查
- “Connection refused” (连接被拒绝):
- 服务器 IP/端口错误。
- 服务器防火墙阻止了连接。
- SSH 服务 (
sshd
) 未在服务器上运行 (sudo systemctl status sshd
检查)。
- “Permission denied (publickey)” (权限被拒绝 – 公钥):
- 服务器上
~/.ssh/authorized_keys
文件权限不对 (应为600
) 或.ssh
目录权限不对 (应为700
)。 - 公钥未正确添加到
authorized_keys
文件。 - 本地私钥路径错误或权限太开放 (私钥文件权限应为
600
)。 - 服务器
sshd_config
中PubkeyAuthentication
被设为no
。
- 服务器上
- “Permission denied (password)” (权限被拒绝 – 密码):
- 用户名或密码错误。
- 服务器
sshd_config
中PasswordAuthentication
被设为no
。 - 该用户被禁止登录 (检查
/etc/ssh/sshd_config
中的AllowUsers
,DenyUsers
等指令)。
- “Host key verification failed” (主机密钥验证失败):
- 服务器重装系统或密钥变更,与本地
~/.ssh/known_hosts
中记录不符。谨慎操作! 确认服务器身份后,可删除known_hosts
文件中对应行再连接。
- 服务器重装系统或密钥变更,与本地
安全最佳实践总结
- 首选 SSH 密钥登录: 禁用密码登录是提升安全性的最有效措施。
- 禁用 root 登录: 使用普通用户 +
sudo
。 - 修改默认 SSH 端口: 减少自动化攻击扫描。
- 使用强密码/强密钥口令: 即使使用密钥,私钥也应加密保护。
- 保持软件更新: 及时更新操作系统和 SSH 软件包。
- 配置防火墙: 严格限制入站连接。
- 使用 Fail2Ban: 自动封禁多次尝试失败的 IP 地址。
- 最小权限原则: 用户只拥有完成工作所需的最小权限。
- 谨慎操作: 对系统文件的修改(尤其是
/etc/ssh/sshd_config
)要格外小心,修改前备份,修改后测试。
掌握这些登录方法和安全规范,是高效、安全地管理 Linux 服务器的基石,务必根据你的具体环境(云服务器、本地服务器、发行版)调整细节,并始终将安全放在首位。
引用说明:
- 本文核心操作基于 OpenSSH 协议实现,参考了 OpenSSH 官方文档中关于
ssh
,ssh-keygen
,ssh-copy-id
等工具的使用说明以及sshd_config
配置选项。 - SSH 协议标准定义参考了 IETF RFC 文档 (如 RFC 4250 – RFC 4256)。
- 系统命令 (
adduser
,usermod
,apt
,yum
,dnf
,systemctl
,ufw
,firewalld
) 的使用参考了 Debian、Ubuntu、CentOS、RHEL 等主流 Linux 发行版的官方手册页 (man
pages) 和文档。 - 安全最佳实践综合了行业普遍认可的标准,如 CIS Benchmarks 中关于 SSH 配置的建议。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9148.html