Jumpserver开启MFA认证,SecureCRT自动输入登录

1、JumpServer开启MFA认证

开启MFA认证:   

  

开启后效果:

2、使用浏览器登录堡垒机,配置MFA

按需下载对应app进行绑定

到此手机绑定成功,登录时候可以在手机app查看动态码。

但是每次登录,都需要打开手机,找到动态码,手动输入很麻烦

使用SecureCRT可实现自动输入,很方便快捷。

3、生成动态码python脚本内容如下:

需要将google_secret改为你的Secret

import sys
import calendar
import datetime
import hashlib
import time
import base64
import hmac
import codecs
import re

class OTP(object):
    def __init__(self, s, digits=6, digest=hashlib.sha1, name=None, issuer=None):
        self.digits = digits
        self.digest = digest
        self.secret = s
        self.name = name or 'Secret'
        self.issuer = issuer

    def generate_otp(self, input):
        if input < 0:
            raise ValueError('input must be a positive integer')
        hasher = hmac.new(self.byte_secret(), self.int_to_bytestring(input), self.digest)
        hmac_hash = bytearray(hasher.digest())
        offset = hmac_hash[-1] & 0xf
        code = ((hmac_hash[offset] & 0x7f) << 24 |
                (hmac_hash[offset + 1] & 0xff) << 16 |
                (hmac_hash[offset + 2] & 0xff) << 8 |
                (hmac_hash[offset + 3] & 0xff))

        str_code = str(code % 10 ** self.digits)
        while len(str_code) < self.digits:
            str_code = '0' + str_code
        return str_code

    def byte_secret(self):
        secret = self.secret
        missing_padding = len(secret) % 8
        if missing_padding != 0:
            secret += '=' * (8 - missing_padding)
        return base64.b32decode(secret, casefold=True)

    @staticmethod
    def int_to_bytestring(i, padding=8):
        result = bytearray()
        while i != 0:
            result.append(i & 0xFF)
            i >>= 8
        return bytes(bytearray(reversed(result)).rjust(padding, b'\0'))


class TOTP(OTP):
    def __init__(self, s, digits=6, digest=hashlib.sha1, name=None, issuer=None, interval=30):
        self.interval = interval
        super(TOTP, self).__init__(s=s, digits=digits, digest=digest, name=name, issuer=issuer)

    def now(self):
        return self.generate_otp(self.timecode(datetime.datetime.now()))

    def timecode(self, for_time):
        if for_time.tzinfo:
            return int(calendar.timegm(for_time.utctimetuple()) / self.interval)
        else:
            return int(time.mktime(for_time.timetuple()) / self.interval)

def Main():
    google_secret = '此处替换为刚才记录的Secret'
    code = TOTP(s=google_secret,interval=30).now()
    tab = crt.GetScriptTab()
    if tab.Session.Connected != True:
        crt.Dialog.MessageBox("Session Not Connected")
        return
    tab.Screen.Synchronous = True
    tab.Screen.WaitForStrings(['Please Enter MFA Code.[OTP Code]: '])
    tab.Screen.Send("{code}\r".format(code=code))
    return

Main()

4、配置SecureCRT

  • 设置自动输入密码
  • 引用刚才的python脚本

5、验证

双击左侧刚才配置的主机进行登录

6、已自动登录完美,很省事方便

在Java中实现Azure Multi-Factor Authentication (MFA) 需要使用Azure Active Directory (AAD)的API和库。以下是一些关键步骤和技术: 1. **设置环境**: - 安装Azure AD客户端库(如`azure-identity`):你可以使用Maven或Gradle添加依赖,例如对于Maven,添加到pom.xml: ```xml <dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.50.0</version> </dependency> ``` 2. **配置凭据**: - 获取应用注册:首先,在Azure portal中创建一个新的应用程序并获取Client ID、Client Secret以及可能需要的Tenant ID。 3. **身份验证器选择**: - AzureADInteractiveAuthenticator(交互式),适合桌面应用,通常用于Web应用的单点登录(SSO)。 - ConfidentialClientApplication(秘密持有者),适用于没有UI的应用程序,如后台服务。 4. **代码示例**(使用InteractiveAuthentication): ```java try { ClientSecretCredential credential = new ClientSecretCredentialBuilder() .tenantId(TENANT_ID) .client_id(CLIENT_ID) .clientSecret(SECRET) .build(); // 创建一个InteractiveAuthenticationContext实例 InteractiveAuthenticationContext authContext = new InteractiveAuthenticationContext(AUTHORITY_URI, credential); // 获取验证码/挑战 PromptChoice challenge = authContext.acquireTokenSilentAsync("SCOPE", claims).get(); if (challenge == null || !challenge.isBroker()) { // 如果需要用户输入MFA,调用prompt()方法 authResult = authContext.acquireTokenInteractiveAsync("SCOPE").join(); } // 使用access_token进行后续操作 accessToken = authResult.accessToken; } catch (Exception e) { // 处理错误和异常 log.error("Failed to acquire token: ", e); } ``` 5. **处理MFA**: - 对于短信或电话验证,你需要引导用户提供验证码并将其传递给authContext的`acquireTokenInteractiveAsync()`方法。 - 对于硬件安全密钥(HSM)或智能卡,可能需要特定库(如Windows Hello for Business API)来读取设备输入。 6. **保护敏感数据**: - 客户端secret应该妥善保管,最好使用Key Vault等安全存储机制。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值