要想使用公私钥登录服务器首先需要生成密钥对,可以在本地计算机使用 ssh-keygen
命令生成密钥对。
ssh-keygen
命令需要安装OpenSSH客户端以Windows11为例,在设置>系统>可选功能 搜索OpenSSH 安装客户端, 使用powershell
查看是否安装
> gcm ssh-keygen
CommandType Name Version Source
----------- ---- ------- ------
Application ssh-keygen.exe 9.5.3.1 C:\Windows\System32\OpenSSH\ssh-keygen.exe
ssh-keygen -t rsa -b 4096
-t rsa
:指定密钥类型为 RSA。-b 4096
:指定密钥长度为 4096 位,更高的密钥长度意味着更强的安全性回车后会提示你输入保存密钥的文件路径和可选的密码,不需要密码直接按回车跳过即可。
默认情况,密钥会保存在 ~/.ssh/id_rsa
(私钥)和 ~/.ssh/id_rsa.pub
(公钥),在Windows上一般在C:\Users\<用户名>\.ssh
下
例如在我这里
24123@lolik ~\.ssh
> ls
目录: C:\Users\24123\.ssh
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2025/2/19 10:03 210 config
-a---- 2024/6/7 14:43 3381 id_rsa
-a---- 2024/6/7 14:43 738 id_rsa.pub
-a---- 2025/2/19 9:57 5828 known_hosts
-a---- 2025/2/19 9:52 5080 known_hosts.old
known_hosts 可能保存着连接过的服务器公钥,我的config是vs code 保存的远程连接信息创建的,包含别名和主机名等
在上述config文件中(没有可以自己创建)例如:
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host winserverA
HostName 1.1.1.1
User administrator
IdentityFile ~/.ssh/id_rsa
Host serverB
HostName 1.1.1.1
User root
IdentityFile ~/.ssh/id_rsa
Host
:为服务器设置一个别名,方便记忆。
HostName
:服务器的 IP 地址。
User
:服务器的用户名。
IdentityFile
:私钥文件路径。
IdentityFile
似乎默认是 ~/.ssh/id_rsa
因为我使用ssh 别名
或ssh username@ip
命令可以直接登录,没有指定-i ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub
选择输出内容复制
登录服务器,使用密码或者其他方式
在服务器上,家目录~下创建 .ssh
目录(如果不存在),并修改权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh
使用vi 或者vim 创建~/.ssh/authorized_keys
vim ~/.ssh/authorized_keys
粘贴公钥并保存
修改服务器ssh配置
编辑/etc/ssh/sshd_config
文件
vim /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
允许公钥验证和指定公钥文件
PermitRootLogin
设置为 prohibit-password
或 without-password
,禁用 root 用户的密码登录,仅允许公钥登录。重启sshd服务使配置生效(也可使用老命令service
)
sudo systemctl sshd restart
登录测试
例如 在本地计算机终端输入,server_ip是服务器ip(如果根据上面在config配置了别名,也可使用别名登录)
ssh root@server_ip
本地如果是首次登录会显示警告,输入yes即可
不出意外会直接登录服务器,也是相当便捷