一、前置条件
1. 生成 SSH 密钥对
密钥对可以在windows下生成,也可以在linux服务器生成,只需要分清公钥和私钥就可以,公钥以.pub结尾,私钥只有一个光秃秃的文件名,公钥可以随意分发,私钥只能自己持有
建议优先使用更安全的 ed25519 算法:
# 在 PowerShell 中执行
ssh-keygen -t ed25519 -C "可以在这里写用途也可以写标记"
或使用传统 兼容的RSA 算法
ssh-keygen -t rsa -b 4096 -C "可以在这里写用途也可以写标记"
密钥存储说明:
- 私钥路径:C:\Users\你的用户名.ssh\id_ed25519(或 id_rsa)
- 公钥路径:C:\Users\你的用户名.ssh\id_ed25519.pub(或 id_rsa.pub)
2. 服务器公钥配置
登录目标服务器执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
cat >> ~/.ssh/authorized_keys << EOF
# 在此粘贴你的公钥内容
EOF
chmod 600 ~/.ssh/authorized_keys
# 重启 SSH 服务(不同系统命令不同)
sudo systemctl restart sshd # 大多数 systemd 系统
sudo service ssh restart # 旧版 SysV 系统
服务端权限验证
# 检查关键目录权限
ls -ld ~/.ssh # 应显示 drwx------
ls -l ~/.ssh/authorized_keys # 应显示 -rw-------
客户端权限验证(重要!)
- 确保私钥文件 (
id_rsa
) 仅当前用户可读: 右键文件 → 属性 → 安全 → 高级 → 禁用继承 → 删除所有用户 → 仅添加当前用户并赋予"读取"权限。 - 如果是在windows下生成的密钥对,默认已经配置好了权限
技术要点
- 已生成 SSH 密钥对(私钥 id_rsa + 公钥 id_rsa.pub或私钥 id_ed25519 + 公钥 id_ed25519.pub)
- 已将公钥上传到服务器的
~/.ssh/authorized_keys
并重启了ssh服务 authorized_keys
配置了正确的权限- 确保已安装 OpenSSH 客户端(Windows 10/11 默认支持,可通过
PowerShell
输入ssh
验证)
测试
ssh username@ip或domain [-p 端口] -i "私钥路径"
如果配置正确就可以使用上面的命令成功登录服务器,端口如果是默认的22可以不使用-p
选项,因为使用这样的命令登录会很繁琐,ssh提供了一种快捷简便的配置来实现快捷登录
二、windows快捷登录配置步骤
1. 创建 SSH 配置文件
- 路径:
C:\Users\你的用户名\.ssh\config
(若目录或文件不存在,请手动创建) - 模板示例内容(以下是最基本的配置):
# 生产服务器配置
Host prod-server
HostName 192.168.1.100
User admin
Port 22022
IdentityFile "D:/ssh-keys/prod_ed25519"
# 测试服务器配置
Host test-server
HostName test.example.com
User dev
IdentityFile "C:/Users/MyUser/.ssh/id_rsa"
2. 配置要点:
- Host:自定义的简短别名(任意命名,如
prod-serve, test-server
),后续通过ssh prod-serve
登录。 - 多个服务器可配置多个 Host 区块
- IdentityFile:
- 私钥路径需用英文双引号包裹(避免路径中的空格和特殊字符报错)。
- 若使用 Windows 路径分隔符
\
,需改为/
或转义为\\
(请参考示例)。
三、一键登录验证
打开终端(CMD/PowerShell/windows terminal)输入:
ssh myserver #在config中配置的别名
成功后会直接登录服务器,无需输入 IP、端口、用户名或私钥路径!
四、常见问题
连接被拒绝
- 检查服务器 SSH 服务是否监听端口
3389
(netstat -tuln | grep 3389
)。 - 确认防火墙放行该端口。
# 安装 ufw(如果未安装) sudo apt install ufw -y # 放行 SSH 端口(以 3389 为例) sudo ufw allow 3389/tcp sudo ufw enable sudo ufw reload
- 检查服务器 SSH 服务是否监听端口
密钥权限错误
- 运行
icacls "D:\OneDrive - mirosoft\ssh-key-all-in-one\id_rsa" /reset
重置权限。
- 运行
路径问题
- 若私钥路径包含空格,必须用双引号。
五、进阶
1. 多密钥管理
推荐目录结构:
D:\ssh-keys\
├─company\
│ ├─dev_ed25519
│ └─prod_rsa
└─personal\
└─github_ed25519
配置文件示例:
Host github.com
IdentityFile "D:/ssh-keys/personal/github_ed25519"
- 建议密钥路径使用全英文,以避免奇怪的错误
六、其他安全建议
- 密钥加密:生成时设置 passphrase(如果你确定不会忘记的话)
- 端口隐藏:修改默认 22 端口为高位端口
- 定期轮换:每 90 天更换密钥对(个人使用不推荐,生产环境根据安全策略来管理)
- 创建普通用户来管理vps 非常不建议使用root来管理vps