首页 > 其他分享 >JSCH和SSHD实现密码+二次验证码登录服务器

JSCH和SSHD实现密码+二次验证码登录服务器

时间:2024-09-26 11:24:33浏览次数:3  
标签:JSCH SSHD String 二次 验证码 session new 服务器

背景

目前通过JSCH和SSHD登录服务器的方式基本都是密码或者密钥认证,但有些服务器在密码登录后会有个二次验证,一般是TOTP验证码。下面就是用xshell连接服务器后弹出的二次验证:

JSCH和SSHD实现密码+二次验证码登录服务器_服务器

JSCH和SSHD的官方文档没有详细的例子说明如何通过这个二次验证,研究文档的接口和参数后找到了结合密码和二次验证码登录服务器的方法。


JSCH实现

jsch首先需要给session添加配置:

session.setConfig("PreferredAuthentications", "password,keyboard-interactive");

然后新建类实现以下两个接口

UIKeyboardInteractive, UserInfo

实现promptKeyboardInteractive方法,返回二次验证码

@Override
public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) {
    response[0] = "二次验证码"
    return response;
}

创建接口实现类对象给session

session.setUserInfo(new UserInfoImpl());

这样jsch就会自动把二次验证码回填给服务器通过验证。完整代码如下:

JSch jsch = new JSch();
Session session = jsch.getSession("用户名", "服务器地址", 端口);
// 服务器密码
session.setPassword(config.getPassword());
session.setConfig("StrictHostKeyChecking", "no");
// 两步认证,密码 + 谷歌验证码
session.setConfig("PreferredAuthentications", "password,keyboard-interactive");
session.setUserInfo(new UserInfoImpl());
session.connect(5000);


SSHD实现

sshd和jsch类似,同样需要实现接口创建对象给ClinetSession。首先新建类实现接口

UserInteraction

实现interactive方法,返回二次验证码

@Override
public String[] interactive(ClientSession session, String name, String instruction, String lang, String[] prompt, boolean[] echo) {
    String[] response = new String[prompt.length];
    response[0] = "二次验证码"
    return response;
}

创建接口实现类对象给ClinetSession

session.setUserInteraction(new UserInteractionImpl);

完整代码如下:

SshClient sshClient = SshClient.setUpDefaultClient();
sshClient.setSessionHeartbeat(SessionHeartbeatController.HeartbeatType.IGNORE, Duration.ofMinutes(5));
sshClient.start();
ClientSession session = sshClient.connect("用户名", "服务器地址", 端口).verify(5 , TimeUnit.SECONDS).getSession();
// 服务器密码
session.addPasswordIdentity(sshConfig.getPassword());
// 两步认证,密码 + 谷歌验证码
session.setUserInteraction(new UserInteractionImpl);
session.auth().verify();


结语

通过以上两个方法都可以实现密码+二次验证码的方式登录服务器。二次验证码可以手动输入或通过密钥生成。

标签:JSCH,SSHD,String,二次,验证码,session,new,服务器
From: https://blog.51cto.com/u_17039964/12118075

相关文章

  • 生成一个验证码
    思路:验证码一般包括数字和字母。数字和字母之间可以用ASCLL值进行转换,所以数字的范围是6590或97122。publicstaticvoidmain(String[]args){for(inti=0;i<4;i++){intn=(int)(Math.random()(91-65))+65;charm=(char)n;System.out.print(m);}}运行结果:DEHV如果是生成......
  • 某片滑块验证码逆向
    目标网站aHR0cHM6Ly93d3cueXVucGlhbi5jb20vcHJvZHVjdC9jYXB0Y2hh一、抓包分析包含各种加密参数,包括轨迹的 二、逆向分析 请求参数,其中captchaId是固定不变的,token是上个接口返回的跟栈,最顶端堆栈机密参数已经生成往回跟栈,cb值、i和k的值是在这生成的此时e包含了......
  • WGCAT 工单系统 如何在登录页面添加验证码
    WGCAT工单管理系统,支持设置登录输入验证码,只需要修改下配置文件就可以了打开配置文件config/application.yml,设置如下配置项#登录页面是否需要显示验证码,yes显示,no不显示vercodeCheck:yes然后重启下程序就好啦......
  • 帝国CMS为什么验证码均显示为“ecms”?
    验证码显示为“ecms”的原因通常是由于服务器空间不支持GD图形库(GNUImageManipulationLibrary)。GD库是PHP的一个扩展,用于动态生成图像,如验证码图片。当服务器没有安装或禁用了GD库时,帝国CMS生成验证码的功能就会受到影响,导致验证码显示为默认的文本“ecms”。解决方法方法一:......
  • 帝国CMS认证码和验证码的区别
    认证码和验证码在功能和用途上有着明显的区别:认证码认证码通常是系统安装或配置时设置的一种验证信息,用于内部人员的身份验证。认证码可能指的是:安装时设置的特定信息:在帝国CMS这样的系统中,认证码是在安装过程中初始化管理员账号时设置的,用于后续登录后台管理界面时的额外验......
  • 获取验证码倒计时
    一般项目中获取验证码时,设置等待时间60s,倒计时结束之后才能继续重新获取问题:一开始我只是给按钮设置了倒计时,以至于按钮是一次性的,只能获取一次,倒计时结束按钮恢复可点击状态,再点击之后按钮就不倒计时了...原因:是因为我在编写计时器的时候没清除之前的计时器,没考虑到:如果获取验......
  • Thinkphp8安装topthink/think-captcha验证码的和使用方法
    ThinkPHP8默认没有验证码,安装验证码可以使用composer来安装验证码一、安装验证码执行composer安装验证码composerrequiretopthink/think-captcha二、使用方法1、在目录app\middleware.php中开启session\think\middleware\SessionInit::class2、配置验证码安装好验证......
  • 帝国CMS点击显示验证码如何调用?
    在帝国CMS中,显示验证码通常涉及以下几个步骤:加载必要的JavaScript文件、添加显示验证码的按钮和处理验证码的逻辑。下面是详细的步骤和示例代码:1.加载必要的JavaScript文件首先,确保页面加载了/e/data/js/ajax.js文件。这可以通过在HTML头部添加相应的<script>标签来实现。<......
  • 数字英文验证码识别 API 对接说明
    数字英文验证码识别API对接说明本文将介绍一种数字英文验证码识别API对接说明,它是基于深度学习技术,可用于识别变长英文数字验证码。输入验证码图像的内容,输出验证码结果。接下来介绍下数字英文验证码识别API的对接说明。注册试用链接注册试用链接申请流程要使......
  • 验证码
    importcom.example.common.CaptureConfig;importcom.wf.captcha.SpecCaptcha;importcom.wf.captcha.base.Captcha;importcom.wf.captcha.utils.CaptchaUtil;importorg.springframework.web.bind.annotation.CrossOrigin;importorg.springframework.web.bind.annota......