公钥相当于锁,用于加密
私钥相当于钥匙,用于解密
密钥对,代替密码登录,支持代码自动化
1.用户生成密钥对
用户通过 ssh-keygen 命令生成密钥对。
2.公钥上传服务器
将公钥内容上传到服务器的指定位置。
3.客户端用私钥签名
客户端连接服务器时,用私钥对随机数据进行签名。
4.服务器用公钥验证
服务器通过公钥验证签名,验证通过允许登录。
准备的环境: 一台windows电脑,装了xshell连接阿里云服务器,服务器公网ip是47.99.46.71
又在这个电脑装了git bash模拟本地的linux环境(也可以用wsl)
在git bash里运行:
ssh-keygen -t rsa -b 4096 -C "singer"
秘钥类型rsa,长度4096bit,命名为singer
第一个确认是 默认存放路径
第二个是设置密码,直接回车是不写密码
第三个是确认密码

如果私钥id_rsa不是权限为600,访问对方服务器的时候会被SSH拒绝登录

输入ssh-copy-id -i /root/.ssh/id_rsa.pub root@47.99.46.71 将公钥传输给对方
回车后输入登录对方的密码

如果只有一个密钥对,可以不指定,直接用ssh-copy-id root@47.99.46.71
比如我这里只有id_rsa和id_rsa.pub这一对密钥对
![]()
传上去时要你输入对方密码
再次验证下,是否登录不再需要密码了:
ssh root@47.99.46.71

你本地的 id_rsa.pub(公钥)→ 被 ssh-copy-id 复制 → 粘贴到远程服务器 root 用户的 ~/.ssh/authorized_keys 文件中。
这个文件就是远程服务器用来验证 “免密登录” 的核心文件:当你用 ssh root@47.99.46.71 登录时,服务器会检查这个文件里有没有你的公钥,有就允许免密登录。
修改下私钥的权限,看还让我们登录不:
chmod 644 id_rsa (正常应该是600)
ssh root@47.99.46.71
发现又要你输密码了

改回去
cd /root/.ssh/
chmod 600 id_rsa

ssh root@47.99.46.71 发现又能免密登录了
在xshell里的编辑秘钥登录界面是:
新建会话-用户身份验证-public key勾选,password取消--设置--

右边三个点--导入--路径是你之前ssh-kegen -t rsa -b 4096 -C "singer" 下一步显示的存放路径
导入id_rsa私钥

再输入目标主机
最后只要输入用户名root就能登录了

6536

被折叠的 条评论
为什么被折叠?



