论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
云原生
›
【设置ssh免密不起作用?彻底搞懂密钥】vscode在remote ...
【设置ssh免密不起作用?彻底搞懂密钥】vscode在remote SSH免密远程登录 ...
缠丝猫
金牌会员
|
2022-6-24 06:32:24
|
显示全部楼层
|
阅读模式
楼主
主题
773
|
帖子
773
|
积分
2319
目录
1.什么是密钥
1.1公钥
1.2 私钥
1.3 密钥SSH登录过程
2.什么是SSH
2.1 认识SSH
2.2 SSH的安全机制
3.设置密钥免密登录
3.1 本地生成公钥和私钥
3.2 远程主机配置公钥
⚠️ 3.3 设置ssh路径下的权限(重要!)
4. vscode的remote插件的配置
1.什么是密钥
SSH 默认采用密码登录,这种方法有很多缺点,简单的密码不安全,复杂的密码不容易记忆,每次手动输入也很麻烦。密钥登录是更好的解决方案。
密钥(key)是一个非常大的数字,通过加密算法得到。对称加密只需要一个密钥,非对称加密需要两个密钥成对使用,分为公钥(public key)和私钥(private key)。
1.1公钥
公钥----添加到服务器的某个账户上,~/.ssh目录下(如该目录不存在,则新建一个),并命名为authorized_keys(如该文件已经存在,则把公钥的内容放在原authorized_keys内容的末尾,如果authorized_keys文件的末尾不是一个换行符,会导致新的公钥添加到前一个公钥的末尾,两个公钥连在一起,使得它们都无法生效。所以,如果authorized_keys文件已经存在,使用ssh-copy-id命令之前,务必保证authorized_keys文件的末尾是换行符(假设该文件已经存在)。
1.2 私钥
私钥----必须私密保存,不能泄漏。
SSH 密钥登录采用的是非对称加密,每个用户通过自己的密钥登录。其中,私钥必须私密保存,不能泄漏;公钥则是公开的,可以对外发送。它们的关系是,公钥和私钥是一一对应的,每一个私钥都有且仅有一个对应的公钥,反之亦然。
如果数据使用公钥加密,那么只有使用对应的私钥才能解密,其他密钥都不行;反过来,如果使用私钥加密(这个过程一般称为“签名”),也只有使用对应的公钥解密。
1.3 密钥SSH登录过程
手动将客户端的公钥放入远程服务器的指定位置。
客户端向服务器发起 SSH 登录的请求。
服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。
客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。
参考文章
2.什么是SSH
2.1 认识SSH
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
2.2 SSH的安全机制
基于口令的安全验证
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。
基于密钥的安全验证
你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。
参考文章
3.设置密钥免密登录
3.1 本地生成公钥和私钥
在本地终端使用ssh-keygen命令创建的密钥,会在本地~/.ssh/的目录内生成两个文件id_rsa和id_rsa.pub,一个是私钥,另一个是公钥。
ssh-keygen命令 用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。ssh密钥默认保留在 ~/.ssh 目录中。如果没有 ~/.ssh 目录,ssh-keygen命令会使用正确的权限创建一个。
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa-remote-ssh
复制代码
执行完命令,一直按回车即可生成密钥,执行过程中会显示保存密钥的路径。
参考文章
参数说明
-t 指定要创建的类型
-b 密钥长度
-f 指定用来保存密钥的文件名
id_rsa-remote-ssh 名字可以随意定义
cd到.ssh文件中就可以看到密钥文件了
config是vscode 连接远程主机的配置文件
id_rsa 就是私钥文件
id_rsa.pub 就是公钥文件
known_host 就是记录你曾经远程连接过的机器信息文件
3.2 远程主机配置公钥
先登录你的远端服务器,然后将刚才生成本机公钥复制到远程服务器~/.ssh/authorized_keys中,authorized_keys文件不存在则创建。这样就建立了本地主机和远端主机的双端验证通道,就可以跳过密码了。
你可以直接把id_rsa.pub文件直接复制到~/.ssh/目录下,然后把文件名改为authorized_keys。也可以在~/.ssh/目录下新建authorized_keys文件,然后把id_rsa.pub中的内容复制到authorized_keys中。两种方案都可以,个人推荐第一种,可以避免复制内容的时候搞错。
⚠️ 3.3 设置ssh路径下的权限(重要!)
⚠️ 远程服务器~/.ssh/authorized_keys文件设置好后,一定要修改路径下的权限,否则ssh密钥认证会失效!!
由于 authorized_keys这个文件我们自己创建的,而 ssh 处于安全性考虑,对.ssh目录下的文件权限内容有着严格的权限要求,如果权限设置不对,在配对秘钥的时候会无法打开authorized_keys文件从而导致秘钥配对失败。而ssh此时没有放弃连接,依然会尝试询问用户密码。最终产生的结果就是用户配置了公钥却仍然需要输入密码的问题。很多教程都没有说明这一点,导致我也是费了很大功夫才找到问题。
参考文章
设置用户权限/home/qwa(改成自己的用户)
chmod 700 /home/userName
复制代码
设置.ssh文件权限~/.ssh
chmod 700 ~/.ssh
复制代码
设置authorized_keys文件权限
chmod 600 ~/.ssh/authorized_keys
复制代码
配置完可以ls -l 命令查看文件的权限 700 对应 dxrw------- (d代表目录) 600对应 -rw--------
设置完权限,还需要更改一些ssh的服务配置信息,切换到root用户打开
文件/etc/ssh/sshd_config
su -
复制代码
vim /etc/ssh/sshd_config
复制代码
把 PubkeyAuthentication 前的 # 号去掉,这样公钥验证才生效。
重启远程服务器的ssh服务
systemctl restart sshd.service
复制代码
4. vscode的remote插件的配置
安装插件
打开remote的config配置
配置主机(ip),用户名(user),私钥的位置
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host root
HostName 110.40.xxx.xxx
User root
IdentityFile /Users/wenanqin/.ssh/id_rsa-remote-ssh
Host qwa
HostName 110.40.xxx.xxx
User qwa
IdentityFile /Users/wenanqin/.ssh/id_rsa-remote-ssh //本机私钥路径
复制代码
设置完保存就可以用vscode远程登录服务器了,再新建一个终端就可以完全代替xshell了
如过文章对你有帮助,可以点一个免费的赞,虽然写文章只是为了记录和分享,但是能得到一些正反馈也是对博主莫大的鼓励~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
缠丝猫
金牌会员
这个人很懒什么都没写!
楼主热帖
MySQL 8.0 新特性梳理汇总
kubernetes之镜像拉取策略ImagePullSec ...
【云原生】Docker 进阶 -- 构建自定义 ...
java如何编写增强for循环呢? ...
用100万的“小报告”扭转老闆的决定— ...
关于身体对内对外感受机制的整理 ...
关于Servlet的补充知识
在chatGPT的帮助下成功从Rancher中删除 ...
SAP各模块优缺点和发展简析
基于C#+unity的2D跑酷闯关对战冒险游戏 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表