¶1 SSH公私钥的生成方法
1 | ssh-keygen |
如果需要生成特定类型的公私钥可以加个-t
参数,例如-t rsa -b 4096
(RSA4096)或者-t ed25519
(ED25519)。从简直接按默认生成就行。
之后的操作就是回车和填入必要信息。从简可以不填入passphase密码,后续操作会方便一些(当然安全性没有加上这个好)。后续博文将会默认你没有设置passphase(输入passphase步骤和确认passphase步骤直接回车过去)。
当输出类似下列语句和一张randomart字符图片之后,公私钥生成完成。依照下面的提示信息找到你生成的公钥的位置,准备好留作后面的准备。
1 | Your identification has been saved in /home/<your_name>/.ssh/id_rsa. |
注意保护好自己的私钥,不要乱发id_rsa
,id_ed25519
之类的文件给别人。不过公钥*.pub
文件就没有类似私钥的严格保密要求。这个是可以存到服务器作为你的身份凭证的。
¶2 SSH 免密登录
服务器在密钥登录的过程中,不需要知道你的私钥的内容,只需要你的公钥内容即可(基础的公私钥理论)。SSH 免密登录的逻辑大致如下:
- 客户端向服务器发布密钥登录请求
- 服务器向客户端发送随机字符串
- 客户端用私钥加密字符串发给服务器
- 服务器用公钥解密字符串,与先前随机字符串校验
也就是说,服务器端只需要知道公钥即可以进行密钥登录(免密登录)。以Linux服务器为例,服务器存储已知公钥的文件为~/.ssh/authorized_keys
,只要私钥对应的公钥被记录在这个文件中之后,使用对应的私钥就可以免密登录ssh。
linux提供了一个比较方便的方式上传公钥ssh-copy-id
。使用方法范例如下所示:
1 | ssh-copy-id -i /path/to/id.pub username@hostip |
在一个禁止密码登录的服务器上,第一个公钥需要让服务器管理员帮忙上传到你的家目录的~/.ssh文件夹中。你需要给你的管理员提供公钥文件(这个文件在上一节给出了位置),让管理员把公钥放到你的家目录的~/.ssh/authorized_keys
里面。不过,后续的公钥可以自行上传。
假设A机器已经配置好了密钥(免密)登录,现在需要给B机器配置密钥(免密)登录,公钥上传的方法如下:
- 在B机器上运行第1节所述内容生成公私钥
- 将B机器上生成的公钥下载/转移到A机器上
- 在A机器上运行
ssh-copy-id -i /path/to/B_id.pub username@hostip
(注意修改命令)
¶3 常见开发软件使用ssh公私钥方式登录示例
¶Visual Studio Code
理论上只要完成了ssh免密登录,vscode就可以直接免密访问服务器。他们都使用用户目录下.ssh
文件夹内的私钥尝试进行登录。
如果登录失败,可以试试:侧边栏SSH连接页面 -> 左上小齿轮 -> 选择配置文件打开配置文件。然后,在服务器的Host的子项目里面添加一行,注意保持缩进。
1 | IdentityFile /path/to/id_file |
¶Xshell
参考文献:https://blog.csdn.net/weixin_41843699/article/details/90680306
在身份验证窗口,选择Public Key -> 用户密钥 -> 浏览 -> 选择第1节中生成的私钥。如未设置密码则密码部分留空。
¶Jetbrains Gateway
SSH Connections(或左侧Connections栏下SSH)-> New Connection -> 填好Username、Host等信息 -> 选择Specify private key -> 选择第1节中生成的私钥即可。
¶4 常见问题
¶权限问题
Linux下,私钥文件应保持600的权限要求。而在windows中,具体权限也有相应要求,详见这篇博文。
先删除原所属用户:
右键私钥文件,属性 - 安全 - 高级 - 禁用继承 - 应用
再添加当前Windows用户:
右键id_rsa文件,属性 - 安全 - 高级 - 添加 - 添加主体 - 立即查找 - 选择当前Windows用户 - 确认 - 应用
本篇博文将会持续更新相关问题。