用你本地已有的私钥(private key)去 SSH 登录远程 Ubuntu 服务器,而不是输入密码。
正确做法是:把对应的公钥(public key)放到服务器上,而不是直接传私钥。
✅ 一、基本原理
-
私钥(
id_rsa或id_ed25519)始终保存在 本地电脑,绝不能上传到服务器。 -
公钥(
id_rsa.pub或id_ed25519.pub)复制到服务器的:~/.ssh/authorized_keys文件中。
服务器就能用公钥来验证你的登录请求。
⚙️ 二、具体操作步骤
假设:
- 远程服务器 IP 是
192.168.1.100 - 用户名是
ubuntu - 你本地已经生成过密钥对(比如在 Windows、Mac 或 WSL 里)
① 检查你本地是否已有 SSH 密钥
bash
ls ~/.ssh/
若看到如下文件:
id_rsa id_rsa.pub
或
id_ed25519 id_ed25519.pub
说明你已有密钥。
如果没有,执行:
bash
ssh-keygen -t ed25519 -C "your_email@example.com"
一路回车即可。
② 将本地公钥上传到服务器(推荐命令)
方法 1:自动上传
bash
ssh-copy-id ubuntu@192.168.1.100
第一次运行会让你输入服务器密码。
命令执行后,它会自动把你本地的
~/.ssh/id_*.pub内容追加到服务器的~/.ssh/authorized_keys文件。
方法 2:手动复制
如果你不能用 ssh-copy-id:
-
查看你本地公钥:
bashcat ~/.ssh/id_ed25519.pub -
复制整行内容(不要有换行)。
-
登录服务器:
bashssh ubuntu@192.168.1.100 -
在服务器上执行:
bashmkdir -p ~/.ssh chmod 700 ~/.ssh echo "你的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
③ 验证免密登录
在本地执行:
bash
ssh ubuntu@192.168.1.100
如果能直接登录而不再提示输入密码,说明设置成功 ✅。
🧩 三、可选优化
如果你使用多个密钥,可以在 ~/.ssh/config 中指定:
bash
Host myserver
HostName 192.168.1.100
User ubuntu
IdentityFile ~/.ssh/id_ed25519
然后你只需:
bash
ssh myserver
即可连接。