免密登录的实现


前言

在使用linux搭建集群时,难免会需要实现不同服务器之间的免密登录,毕竟总是需要输入密码比较费时间,下面我就记录一下自己对免密登录的一些理解及实现。


一、免密登录是什么?

免密登录其实就是我们为了实现不同服务器之间进行互相通信而不需要认证可以直接进行通信的一种手段。其原理大致为:
我们在对应的服务器上面通过ssh-keygen -t rsa生成对应的公钥和私钥,然后将公钥拷贝到我们需要进行免密登录的服务器上,当我们在对该服务器进行登录时,该服务器会在授权key里面查找是否有我们对应的公钥,如果有的话我们就不用再进行密码登录,可以直接进行登录。

二、实现步骤

1.生成密钥对

假设我们需要有两台服务器分别为A和B,我们需要实现A对B的免密登录,那么我们就需要在服务器A上生成对应的公钥(id_rsa.pub)和私钥(id_rsa)。其具体命令为:

ssh-keygen -t rsa

2.拷贝公钥

当我们在服务器A上面生成了对应的公钥和私钥过后,需要将A的公钥拷贝到服务器B中,以便服务器A在对服务器B访问时能够在授权的key中找到服务器A的公钥。其具体命令为:

ssh-copy_id 主机名

总结

以上便是我对免密登录的理解,这里我只是使用了两台服务器来进行举例,可能我们会遇到多台服务器之间实现免密登录,其实都差不多,只是我们需要将对应的公钥拷贝到不同的服务器而已。如果我有什么解释不到位或有错误的地方欢迎大家留言。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现前端免密登录,可以使用 OAuth2 协议和 Spring Cloud Security 来完成。下面是一个简单的实现步骤: 1. 前端应用向认证服务器发起授权请求,请求的参数包括 client_id、response_type、redirect_uri 等。 2. 认证服务器返回授权页面,用户在该页面输入用户名和密码进行登录。 3. 用户登录成功后,认证服务器会将 access_token 和 refresh_token 返回给前端应用。 4. 前端应用将 access_token 存储在客户端的 localStorage 中。 5. 前端应用每次向后端服务发起请求时,将 access_token 附加在请求头中,后端服务通过 access_token 来判断用户是否已经登录。 下面是一个简单的示例代码: 前端代码: ```javascript // 登录 function login(username, password) { var params = { grant_type: 'password', client_id: 'your_client_id', username: username, password: password }; axios.post('/oauth/token', params).then(function(res) { localStorage.setItem('access_token', res.data.access_token); }); } // 请求数据 function fetchData() { var token = localStorage.getItem('access_token'); axios.get('/api/data', { headers: { 'Authorization': 'Bearer ' + token } }).then(function(res) { console.log(res.data); }); } ``` 后端代码: ```java @Configuration @EnableWebSecurity @EnableAuthorizationServer public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Bean public TokenStore tokenStore() { return new InMemoryTokenStore(); } @Bean public JwtAccessTokenConverter accessTokenConverter() { return new JwtAccessTokenConverter(); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager).tokenStore(tokenStore()) .accessTokenConverter(accessTokenConverter()); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory().withClient("your_client_id").secret("your_secret") .authorizedGrantTypes("password", "refresh_token").scopes("read", "write"); } } ``` 以上代码仅供参考,实际开发中需要根据具体业务场景进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值