点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
最近有一个修改linux主机过期密码的需求,因为涉及重置密码的过程比较麻烦,中间要设置好几次临时密码。那么通过程序来实现的话就比较简单了。
1
使用工具
我使用的是jsch。首先介绍下:
jsch是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器。
jsch进行服务器连接时可以看作类似java的jdbc连接,首先需要实例化一个jsch对象,再利用这个对象根据用户名,主机ip,端口获取一个Session对象,设置好相应的参数后,进行连接,创建连接后,这个Session时一直可用的,所以不需要关闭。之后我们需要在Session上建立channel通道。如下图:
那么到这里,基本就可以去实现自己的逻辑了。
2
实现过程
跟着上面步骤继续走,我们通过jsch连接到对应的linux主机上执行修改密码的shell命令,对linux主机密码进行修改。这一块对于linux主机未过期的密码进行修改通过直连比较容易实现的。
那么在linux主机密码已经过期的情况下对linux主机密码进行重置时,我发现到通过jsch直连linux主机根本行不通。因为这时使用过期密码直连linux主机相当于密码错误。
接下来我就找一个linux主机用户密码过期的例子。
上图在linux主机上可以看出主机密码已经过期,那我们通过jsch连一下看看:
如上图,我们会发现直连不了对应主机。这也相当于通过jdbc的方式连接数据库时,密码错误一样。
那我是怎么处理的呢?
我用很简单的方式:找一个能跳转的linux主机,注意此跳转机的用户密码不能过期哦。通过jsch直连跳转机,然后在跳转机上执行ssh -l username ip 命令,连接到要修改密码的linux主机用户,此时通过模拟主机真实场景。在jsch channel中实现与主机的交互实现修改密码。
执行ssh -l username ip 命令,检查密码过期:
执行ssh -l username ip 命令,修改过期密码:
验证密码修改成功。
此处我只修改了一次密码,重置密码的逻辑可以通过程序循环多修改几次实现。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129463.html
摘要:主要是将一个服务集群部署到远端的服务器上,具体服务器的连接信息会通过接口传入。本来部署是人工来完成的,无非是将一些必须的文件到目标服务器上,然后远程登录,执行一些安装的操作,齐活。 介绍 前段时间接了一个比较特殊的需求,需要做一个用于部署服务的服务。主要是将一个k8s服务集群部署到远端的服务器上,具体服务器的连接信息会通过接口传入。 本来部署是人工来完成的,无非是将一些必须的文件s...
摘要:系统下直接用用户登录是比较不安全的,所以我们拿到云主机后的第一件事就应该是创建一个普通用户,并禁用权限来保障主机安全。创建新用户并设置登录密码。重启再次通过登录,已提示限制登录,使用和新设置的密码登录提示登录成功。linux系统下直接用root用户登录是比较不安全的,所以我们拿到云主机后的第一件事就应该是创建一个普通用户,并禁用root权限来保障主机安全。以下是详细的操作步骤。创建新用户并设...
摘要:默认的系统管理员的为,我们添加用户的时候最好使用以上的,范围的最好保留给系统用。临时修改主机名新主机名永久修改主机名文件中修改文件存放的是域名与的对应关系添加一个新主机名到原文地址 安装 Git 安装: sudo apt-get install git 安装 Nginx 安装: sudo apt-get install nginx 启动: sudo /etc/init.d/ngi...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1860·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20