$ cat post.md

从零开始玩转 Ubuntu ④:SSH 远程登录与密钥认证

服务器不用接显示器:开启 SSH 服务、从 Windows/macOS/Linux 远程连接、配置密钥登录取代密码,以及 scp 传文件的完整入门。

服务器装好系统后,正常状态是塞进角落、不接显示器键盘,所有操作都通过网络远程完成。实现这件事的协议叫 SSH(Secure Shell)——加密的远程终端,也是你今后和服务器打交道的主要方式。

这篇走完「能连上 → 连得安全 → 连得方便」三步。

第一步:确认服务端就绪

安装系统时勾选了 OpenSSH Server 的话,服务已经在跑了。在服务器本机确认:

# 没装的话先装
sudo apt update && sudo apt install -y openssh-server

# 查看服务状态,应该是 active (running)
systemctl status ssh

# 确认在监听 22 端口
sudo ss -tlnp | grep :22

再查一下服务器的内网 IP:

ip a
# 找到 inet 开头的那行,比如 192.168.1.100

第二步:从你的电脑连上去

Windows:Win10 1809 之后的系统自带 SSH 客户端,打开 PowerShell 或 Windows Terminal 直接用。老系统可以装 PuTTY 或 Tabby。

macOS / Linux:终端里自带。

连接命令都一样:

ssh cyril@192.168.1.100
# 格式:ssh 用户名@服务器IP

第一次连接会提示确认服务器指纹:

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

输入 yes 回车,然后输密码(输入时屏幕不显示任何字符,这是正常的,不是卡住了)。看到欢迎信息和服务器的命令行提示符,就登录成功了——现在你敲的每条命令都是在服务器上执行。

第三步:改用密钥登录,告别密码

密码登录有两个问题:每次输密码麻烦;密码可能被暴力破解(服务器一旦暴露公网,扫描器分分钟找上门)。密钥认证是标准解法:一对密钥,私钥留在你的电脑上,公钥放到服务器上,配对成功即登录。

1. 在你的电脑上生成密钥对(不是服务器上):

ssh-keygen -t ed25519 -C "my-laptop"

一路回车即可(密钥会存到 ~/.ssh/id_ed25519 和 ~/.ssh/id_ed25519.pub)。ed25519 是目前推荐的算法,比老的 RSA 更短更快更安全。

2. 把公钥送上服务器:

# Linux / macOS 一条命令搞定
ssh-copy-id cyril@192.168.1.100

# Windows 没有 ssh-copy-id,用这条等价命令(PowerShell)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh cyril@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3. 验证:再 ssh cyril@192.168.1.100,不输密码直接进去了,说明密钥认证生效。

4. 确认生效后,关掉密码登录(在服务器上操作):

sudo nano /etc/ssh/sshd_config

找到并修改这两行(行首有 # 就去掉):

PasswordAuthentication no
PubkeyAuthentication yes

保存后重启服务:

sudo systemctl restart ssh

⚠️ 顺序很重要:先确认密钥能登录,再关密码登录。反过来的话密钥没配好就把自己锁在门外了。改配置时保留当前已登录的会话别断,新开一个终端测试,确认没问题再退出旧会话。

顺手再做两件事

起个别名,少打字。在你电脑的 ~/.ssh/config 里加:

Host myserver
    HostName 192.168.1.100
    User cyril

以后直接 ssh myserver 就能连。

传文件用 scp / sftp:

# 从本地上传到服务器
scp ./index.html myserver:/home/cyril/

# 从服务器下载到本地
scp myserver:/var/log/nginx/access.log ./

# 传整个目录加 -r
scp -r ./site/ myserver:/var/www/

图形化用户也可以用 WinSCP(Windows)或 FileZilla(跨平台),协议选 SFTP,本质都是走 SSH 通道。

如果连公网:必须看加固篇

以上配置在内网练手完全够用。但如果服务器要暴露到公网(云 VPS 天然就是),只做密钥认证还不够——改默认端口、fail2ban 防爆破、禁用 root 登录这些都得上。我之前写过一篇完整的《Ubuntu Server 24.04 初始安全加固清单》,公网机器照着做一遍再上线。

小结

目标 做法
连上服务器 ssh 用户名@IP
连得安全 ed25519 密钥 + 关闭密码登录
连得方便 ~/.ssh/config 起别名
传文件 scp / sftp / WinSCP

会远程登录之后,服务器才算真正「能用」了。下一篇进入实战环节:在这台机器上装 Nginx,让浏览器访问到你部署的第一个网站。