python如何登录开启totp认证的linux服务器

首页 / 常见问题 / 低代码开发 / python如何登录开启totp认证的linux服务器
作者:开发工具 发布时间:2025-04-30 09:28 浏览量:8022
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

Python可以通过使用paramiko库结合TOTP(基于时间的一次性密码算法)应用来实现登录开启TOTP认证的Linux服务器。其中,TOTP认证过程需要生成符合服务器要求的一次性密码,这常常通过一个TOTP客户端来完成、必须保证客户端与服务器时间同步。通常首选的Python TOTP库是pyotp,它可以生成兼容的一次性密码。结合paramikopyotp,可以完成一个SSH客户端,通过TOTP认证登录Linux服务器。

一、理解TOTP与SSH

TOTP(Time-Based One-Time Password)算法生成的密码是基于时间的动态密码,这意味着每隔一定时间这个密码就会发生改变。在服务器端,TOTP可以增强安全性,它通常与用户名和密码的双因素认证配合使用。

SSH(Secure Shell) 是一种网络协议,用于安全地通过不安全的网络访问远程计算机。Python的paramiko库提供了一个SSH的客户端实现。

二、准备工作

在开始前,需要确保Python环境安装有paramikopyotp库。可以使用pip来安装这些库。

pip install paramiko pyotp

在获取TOTP秘钥后,服务器就可以要求客户端在每次登录时提供基于该秘钥和当前时间生成的一次性密码。

三、生成TOTP密码

为了使用TOTP,在需要事先共享一个秘钥,它被用来在服务器和客户端之间生成一次性密码。pyotp可以使用该秘钥来生成密码。

import pyotp

TOTP_SECRET = '你的TOTP秘钥'

totp = pyotp.TOTP(TOTP_SECRET)

one_time_password = totp.now() # 生成当前时间的TOTP一次性密码

print("当前一次性密码:", one_time_password)

此段代码可以生成用于身份验证的当前有效的一次性密码。

四、使用Paramiko登录服务器

接下来,需要构建一个paramiko SSH客户端来尝试连接到服务器。

import paramiko

创建SSH对象

ssh = paramiko.SSHClient()

自动接受不在本地known_hosts文件的主机密钥

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

连接服务器

try:

ssh.connect(hostname='服务器IP', username='你的用户名', password='你的常规密码')

except paramiko.ssh_exception.AuthenticationException:

# 如果常规密码认证失败,则尝试TOTP一次性密码

ssh.connect(hostname='服务器IP', username='你的用户名', password=one_time_password)

五、整合TOTP认证与SSH连接

最后,需要把生成TOTP一次性密码的步骤和创建SSH连接的步骤放到一起,形成一个完整的登录流程。

import paramiko

import pyotp

def ssh_totp_login(host, username, regular_password, totp_secret):

totp = pyotp.TOTP(totp_secret)

one_time_password = totp.now()

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:

# 尝试使用常规密码登录

ssh.connect(hostname=host, username=username, password=regular_password)

print("使用常规密码登录成功")

except paramiko.ssh_exception.AuthenticationException as e:

# 如果常规密码认证失败,则尝试TOTP一次性密码

try:

ssh.connect(hostname=host, username=username, password=one_time_password)

print("使用TOTP一次性密码登录成功")

except paramiko.ssh_exception.AuthenticationException:

print("登录失败,请检查用户名、密码、以及TOTP密码是否正确")

ssh.close()

return

# 登录成功...

# 这里可以执行命令,处理数据...

# 关闭连接

ssh.close()

调用函数进行登录

ssh_totp_login('服务器IP', '你的用户名', '你的常规密码', '你的TOTP秘钥')

核心重点内容

  • 使用pyotp生成TOTP一次性密码
  • 通过paramiko实现SSH协议的连接
  • 尝试先使用常规密码登录,如果失败则使用TOTP一次性密码登录

在实际操作中,请确保替换代码中的服务器IP你的用户名你的常规密码你的TOTP秘钥为实际的值。同时,对于生产环境,应当考虑错误处理、日志记录、以及密码的安全存储等方面的需求。

相关问答FAQs:

1. 如何在Python中实现登录开启TOTP认证的Linux服务器?

TOTP(Time-based One-Time Password)是一种基于时间的一次性密码认证机制,可用于增强Linux服务器的安全性。要在Python中实现登录开启TOTP认证的Linux服务器,可以按照以下步骤进行操作:

  • 首先,使用Python的paramiko库建立与服务器的SSH连接。
  • 其次,通过paramiko库执行服务器上的命令,用于开启TOTP认证。
  • 接下来,使用Python的onetimepass模块生成动态密码,该模块实现了基于RFC 6238标准的TOTP算法。
  • 最后,将生成的动态密码传递给服务器进行认证,完成登录过程。

下面是一个简单的示例代码:

import paramiko
import time
import onetimepass

def login_with_totp(server_ip, username, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(server_ip, username=username, password=password)
    
    # 执行开启TOTP认证的命令,具体命令根据Linux发行版而定
    command = "sudo totp-setup"
    ssh.exec_command(command)
    
    # 生成动态密码
    totp_secret = "your_totp_secret_key"  # 替换为实际的TOTP密钥
    dynamic_password = onetimepass.get_totp(totp_secret)
    
    # 将动态密码传递给服务器进行认证
    stdin, stdout, stderr = ssh.exec_command(dynamic_password)
    
    ssh.close()

# 使用示例:
login_with_totp("服务器IP地址", "用户名", "密码")

2. Python中如何生成TOTP动态密码用于登录Linux服务器?

在Python中生成TOTP动态密码,可以使用onetimepass模块。该模块实现了基于RFC 6238标准的TOTP算法,可以方便地生成动态密码。

以下是一个简单的代码示例:

import onetimepass

def generate_totp_password(secret_key):
    dynamic_password = onetimepass.get_totp(secret_key)
    return dynamic_password

# 使用示例:
totp_secret_key = "your_totp_secret_key"  # 替换为实际的TOTP密钥
password = generate_totp_password(totp_secret_key)
print("动态密码:", password)

3. 如何在Linux服务器上开启TOTP认证?

要在Linux服务器上开启TOTP认证,可以按照以下步骤进行操作:

  • 首先,请确保已安装适用于您的Linux发行版的认证模块(如libpam-google-authenticator)。
  • 其次,运行TOTP认证设置命令(如google-authenticator或totp-setup),该命令将引导您生成TOTP密钥和配置TOTP认证。
  • 接下来,将生成的TOTP密钥(通常以二维码形式)保存在安全的地方,以便绑定到用户的TOTP验证应用程序(如Google Authenticator)上。
  • 最后,通过配置服务器上的认证模块和相关配置文件,将TOTP认证启用并与用户进行关联。

具体操作步骤因Linux发行版而异,可以参考相应的文档或教程进行操作。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

餐饮管理发票代码是什么?全面解析让你轻松掌握核心要点
03-18 11:27
建筑类工程管理代码到底是什么?全面解析来了!
03-18 11:27
工程管理代码是多少?深度解析工程管理代码
03-18 11:27
媒介营销管理代码是什么?揭秘企业高效营销的智能中枢系统
03-18 11:27
产品管理的‘代码’到底是什么?揭秘高效管理的核心方法论与工具组合
03-18 11:27
如何高效解答产品管理中微信代码填写难题?
03-18 11:27
产品管理代码是多少位?不同企业如何选择合适的编码长度
03-18 11:27
工程管理代码到底是什么?一文带你全面了解
03-18 11:27
资产采购管理源代码怎么查?全方位查询指南
03-18 11:27

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科发路8号金融基地1栋5F5
  • 手机:137-1379-6908
  • 电话:0755-86660062
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2026. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
客服咨询热线1
0755-86660062
客服咨询热线2
137-1379-6908
申请预约演示
立即与行业专家交流