两个系统之间跳转免密登录

Posted 枫树湾河桥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个系统之间跳转免密登录相关的知识,希望对你有一定的参考价值。

原文链接:https://blog.csdn.net/CODING_1/article/details/125373831

在处理业务场景时需要跳转不同系统软件,在每次跳转都需要重新登录系统,那么这种繁琐的登录流程会让人心态爆炸,能不能在只登陆一个系统的情况下就可以免登录跳转其他系统呢?当然是可以的.
首先我们回忆一下正常的登录流程:

登录页输入用户名密码
点击登录,后台返回token
将token进行缓存
请求接口将token代入
如果实现免密登录,则不需要输入用户名密码这一流程,现在我们只需要传递一个参数给后台,让后台通过传递的参数解析后返回我们一个token,再利用这个新的token进行登录
思路有了,接下来就是撸代码的过程.
在A系统只需要添加window.open(\'https://xxx.html?token=xxxx\', \'_blank\')打开B系统页面,
因为项目中使用的是vue,刚好可以使用vue的全局路由守卫router.beforeEach((to,from,next)=>) 我们在B系统 添加路由守卫

router.beforeEach((to, from, next) =>
let hrefIdx = window.location.href.indexOf(\'token=\'); // url中是否携带token
let userInfo = localStorage.getItem(\'userInfo\') // 本地缓存中是否有用户信息(系统本身有可能已经登录)
if (hrefIdx > -1 && (userInfo === \'\' || userInfo === undefined || userInfo === null)) // 如果url携带token,并且没有登录后的用户信息
let token = window.location.href.slice(hrefIdx + 6); // 截取token
axios.post(`后台接口`, token).then(res =>
// store.commit("USER_INFO") // 可能需要将用户信息存入store中, 视情况而定
// localStorage.setItem(\'menu\', JSON.stringify(res.data.menuList)) // 可能需要缓存菜单列表, 视情况而定
...
// 这里省略的部分几乎和登录操作相同
let defaultUrl = "/home";
next(defaultUrl);
)
else
next()

)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
当然如果不使用路由守卫,也可以通过跳转一个过渡页面或者在App.vue的生命周期中进行操作.个人还是建议,使用路由守卫.简洁方便管理

免密登录,密钥登录,远程登录

远程登录

我们启动linux系统之后,打开Xshell链接两个虚拟机,像我们这样的小白我是使用两个虚拟机(自己配置一个可以克隆一个,改变一下静态IP就可以),练习的时候在Xshell里链接两个虚拟机。

技术分享

在其中一个虚拟机中敲入命令:ssh-keygen -t  rsa   其中 rsa是密钥对的格式,回车之后会出来交互语句:

第一句话的意思是将生成的密钥对放在哪个文件夹,

第二句话的意思是给密钥对设置密码(我选择空=直接回车)

第三句话的意思是确认一遍密码(继续回车)

进入当前用户的家目录中,查看已经生成的公钥和密钥,因为使用自动生成的命令,在linux系统中,默认将密钥对放在家目录的.ssh文件中,因为.ssh文件是隐藏文件,所以我们用 ls -al 查看就可以看到.ssh文件夹。

技术分享

.pub结尾的文件就是公钥的意思,下一步我们就要将公钥放到你想要登录的另一台虚拟机上,我们一般使用ssh-copy-id  另一台用户名@ip地址(主机名)  【我们加入 -i的命令可以指定特定的文件夹下的文件】,输入命令行之后回车,他会提醒我们是否确定链接  我们输入  (yes)我们在设置免密码登录,第一次的时候需要你输入当前用户的密码,之后输入 密码回车,系统提示您链接并且传输成功。

技术分享

现在我们可以登录另一台的虚拟机,对应用户的家目录下查找.ssh文件夹中就会多出authorized-keys 文件

技术分享

在这里我们要注意一点,我们使用的都是命令自动生成的密钥对,那么我们必须保证的两点就是.ssh文件的权限是700而 authorized-keys的权限必须是600,为了防止不必要的错误发生,这种情况使我们在不使用自动的命令下我们在一台虚拟机中将公钥拷贝到另一台虚拟机中,那就需要我们自己创建.ssh文件夹和authorized-keys文件,我们在要拷贝的文件目录下使用scp  文件名  用户名@ip地址 :目标目录,这时候我们就需要注意  .ssh的权限必须是700 同时 公钥的名字必须叫authorized-keys 并且权限必须是 600。

这样我们就基本配置成功了远程登录的操作,直接在 有密钥的虚拟机上  ssh  ip地址  就可以进行测试 。

在我们的配置过程中可能会出现一种情况就是虚拟机阻止root用户远程登录(为了系统安全),如果我们要使用root用户远程登录的话,就需要修改配置文件中的内容,我们必须切换到root用户,然后vim /etc/ssh/sshd_config  ,我们在修改配置文件的时候再好进行一下备份,这样不会出现误操作导致系统崩溃。

在这个配置文件中我们可以修改系统的默认端口号(链接xshell时候选择的22就是默认端口号)

技术分享

接下来往下走我们会看到是否允许root用户登录,在这我们可以根据需求更改是否同意root用户登录

技术分享

往下走我们还可以看到公钥的存储位置,我们也可以修改公钥的默认存储位置 (刚学最好不要改 嘻嘻)

技术分享

免密登录

我在学习的时候使用的是xshell客户端学习的,所以我给大家说一下在xshell里配置免密登录,其实就是一个密钥在本地,公钥在虚拟机里,很好理解的。

在xshell中进行如下操作:

技术分享

点击下一步,可以自动生成密钥对,下一步会显示是否需要密钥对密码,一般我不会填写直接略过,下一步之后我们就可以看到公钥里面的内容了,我们可以直接选择复制,然后将他粘贴到我们的.ssh下的authorized_keys,没有可以进行新建。注意文件名和权限千万不要写错了,我就犯过这种低级的错误,然后在xshell中选择工具,把密钥添加进去,然后就可以不需要密码登录了!~

技术分享

 

 接下来,你就可以喝个咖啡庆祝一下了!!!!

 

以上是关于两个系统之间跳转免密登录的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统ssh远程免密登录

Hadoop集群节点之间ssh免密登录

10. 节点间免密登陆

免密登录,密钥登录,远程登录

Linux服务器之间的免密登录脚本

Linux系统命令"su - user"在普通用户之间的免密切换