问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是双因子认证?堡垒机有哪些双因子认证方式?

发布网友 发布时间:2022-04-23 18:31

我来回答

3个回答

懂视网 时间:2022-05-01 20:36

#!/usr/bin/env  python
# --*--coding:utf-8 --*--
import paramiko

#创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=‘192.168.1.30‘, port=22, username=‘wulaoer‘, password=‘123456‘)
while True:
    NAM = raw_input(‘input:‘)
# 执行命令
    stdin, stdout, stderr = ssh.exec_command(NAM)
    # 获取命令结果
    print stdout.read()

result = stdout.read()

# 关闭连接
ssh.close() 技术分享 技术分享 技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import paramiko

transport = paramiko.Transport((‘192.168.1.30‘, 22))
transport.connect(username=‘wulaoer‘, password=‘123456‘)

ssh = paramiko.SSHClient()
ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command(‘df‘)
print stdout.read()

transport.close() 技术分享

 基于公钥密钥连接:

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘)
 
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=‘192.168.1.30‘, port=22, username=‘wulaoer‘, pkey=private_key)
 
# 执行命令
stdin, stdout, stderr = ssh.exec_command(‘df‘)
# 获取命令结果
result = stdout.read()
 
# 关闭连接
ssh.close() 技术分享 技术分享 技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import paramiko

private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘)

transport = paramiko.Transport((‘192.168.1.30‘, 22))
transport.connect(username=‘wulaoer‘, pkey=private_key)

ssh = paramiko.SSHClient()
ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command(‘df‘)

transport.close() 技术分享

SFTPClient

用于连接远程服务器并执行上传下载

基于用户名密码上传下载

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import paramiko
 
transport = paramiko.Transport((‘192.168.1.30‘,22))
transport.connect(username=‘wulaoer‘,password=‘123‘)
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put(‘/tmp/location.py‘, ‘/tmp/test.py‘)
# 将remove_path 下载到本地 local_path
sftp.get(‘remove_path‘, ‘local_path‘)
 
transport.close() 技术分享

 基于公钥密钥上传下载

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘)
 
transport = paramiko.Transport((‘192.168.1.30‘, 22))
transport.connect(username=‘wulaoer‘, pkey=private_key )
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put(‘/tmp/location.py‘, ‘/tmp/test.py‘)
# 将remove_path 下载到本地 local_path
sftp.get(‘remove_path‘, ‘local_path‘)
 
transport.close() 技术分享 技术分享 技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import paramiko
import uuid
class Haproxy(object):
    def __init__(self):
        self.host = ‘192.168.1.30‘
        self.port = 22
        self.username = ‘wulaoer‘
        self.pwd = ‘123456‘
        self.__k = None

    def create_file(self):
        file_name = str(uuid.uuid4())
        with open(file_name,‘w‘) as f:
            f.write(‘dn‘)
        return file_name

    def run(self):
        self.connect()
        self.upload()
        self.rename()
        self.close()

    def connect(self):
        transport = paramiko.Transport((self.host,self.port))
        transport.connect(username=self.username,password=self.pwd)
        self.__transport = transport

    def close(self):

        self.__transport.close()

    def upload(self):
        # 连接,上传
        file_name = self.create_file()

        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        # 将location.py 上传至服务器 /tmp/test.py
        sftp.put(file_name, ‘/home/wulaoer/wwwwwwwwww.py‘)

    def rename(self):

        ssh = paramiko.SSHClient()
        ssh._transport = self.__transport
        # 执行命令
        stdin, stdout, stderr = ssh.exec_command(‘mv /home/wulaoer/wwwwwwwwww.py /home/wulaoer/lllllllllll.py‘)
        # 获取命令结果
        result = stdout.read()


ha = Haproxy()
ha.run() 技术分享
二、堡垒机的实现

实现思路:

技术分享

堡垒机执行流程:

1、管理员为用户在服务器上创建帐号(将公钥放置服务器,或者使用用户名密码)

2、用户登录堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表

3、用户选择服务器,并自动登录

4、执行操作并同时将用户操作记录 

 注:配置.brashrc实现ssh登录后自动执行脚本,如:/usr/bin/python /home/wulaoer/menu.py

实现过程

步骤一,使用用户登录

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import getpass

user = raw_input(‘username:‘)
pwd = getpass.getpass(‘password:‘)
if user == ‘wulaoer‘ and pwd == ‘123‘:
    print ‘登陆成功‘
else:
    print ‘登陆失败‘ 技术分享

 步骤二,根据用户获取相关服务器列表

技术分享 dic = {
    ‘laowu‘: [
        ‘172.16.103.189‘,
        ‘c10.puppet.com‘,
        ‘c11.puppet.com‘,
    ],
    ‘wu‘: [
        ‘c100.puppet.com‘,
    ]
}

host_list = dic[‘laowu‘]
#用户可以连接的主机IP
print ‘please select:‘
for index, item in enumerate(host_list, 1):
    print index, item
#循环可以连接的主机
inp = raw_input(‘your select (No):‘)#选择要连接的IP
inp = int(inp)
hostname = host_list[inp-1]#连接的主机IP
port = 22 技术分享

 步骤三,根据用户名、私钥登录服务器

技术分享 tran = paramiko.Transport((hostname, port,))
#连接服务器的端口和IP
tran.start_client()
default_path = os.path.join(os.environ[‘HOME‘], ‘.ssh‘, ‘id_rsa‘)
#连接方式,使用密钥
key = paramiko.RSAKey.from_private_key_file(default_path)
#密钥默认路径
tran.auth_publickey(‘wulaoer‘, key)
#连接用户名和密钥
 
# 打开一个通道
chan = tran.open_session()
# 获取一个终端
chan.get_pty()
# 激活器
chan.invoke_shell()
 
#########
# 利用sys.stdin,肆意妄为执行操作
# 用户在终端输入内容,并将内容发送至远程服务器
# 远程服务器执行命令,并将结果返回
# 用户终端显示内容
######### 技术分享

用户监控日志:

技术分享 while True:
    # 监视用户输入和服务器返回数据
    # sys.stdin 处理用户输入
    # chan 是之前创建的通道,用于接收服务器返回信息
    readable, writeable, error = select.select([chan, sys.stdin, ],[],[],1)
    if chan in readable:
        try:
            x = chan.recv(1024)
            if len(x) == 0:
                print ‘ *** EOF ‘,
                break
            sys.stdout.write(x)
            sys.stdout.flush()
        except socket.timeout:
            pass
    if sys.stdin in readable:
        inp = sys.stdin.readline()
        chan.sendall(inp) 技术分享 技术分享 # 获取原tty属性
oldtty = termios.tcgetattr(sys.stdin)
try:
    # 为tty设置新属性
    # 默认当前tty设备属性:
    #   输入一行回车,执行
    #   CTRL+C 进程退出,遇到特殊字符,特殊处理。

    # 这是为原始模式,不认识所有特殊符号
    # 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
    tty.setraw(sys.stdin.fileno())
    chan.settimeout(0.0)

    while True:
        # 监视 用户输入 和 远程服务器返回数据(socket)
        # 阻塞,直到句柄可读
        r, w, e = select.select([chan, sys.stdin], [], [], 1)
        if chan in r:
            try:
                x = chan.recv(1024)
                if len(x) == 0:
                    print ‘ *** EOF ‘,
                    break
                sys.stdout.write(x)
                sys.stdout.flush()
            except socket.timeout:
                pass
        if sys.stdin in r:
            x = sys.stdin.read(1)
            if len(x) == 0:
                break
            chan.send(x)

finally:
    # 重新设置终端属性
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty) 技术分享 技术分享 def windows_shell(chan):
    import threading

    sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF. ")

    def writeall(sock):
        while True:
            data = sock.recv(256)
            if not data:
                sys.stdout.write(‘ *** EOF *** ‘)
                sys.stdout.flush()
                break
            sys.stdout.write(data)
            sys.stdout.flush()

    writer = threading.Thread(target=writeall, args=(chan,))
    writer.start()

    try:
        while True:
            d = sys.stdin.read(1)
            if not d:
                break
            chan.send(d)
    except EOFError:
        # user hit ^Z or F6
        pass 技术分享

 注:密码验证t.auth_password(username,pw)

 详见:paramiko源码demo

三、数据库操作

 Python操作 Mysql模块的安装

linux:
    yum install MySQL-python
 
window:
    http://files.cnblogs.com/files/wupeiqi/py-mysql-win.zip

 SQL基本使用

1、数据库操作

show databases;  #查看数据库
use [databasename];  #切换数据或者进入数据库
create database  [name]; #新建数据库

 2、数据表操作

技术分享 show tables; #查看数据库表
 
create table students #新建数据库表
    (
        id int  not null auto_increment primary key,
        name char(8) not null,
        sex char(4) not null,
        age tinyint unsigned not null,
        tel char(13) null default "-"
    ); 技术分享 技术分享 技术分享 CREATE TABLE `wb_blog` ( 
    `id` smallint(8) unsigned NOT NULL, 
    `catid` smallint(5) unsigned NOT NULL DEFAULT ‘0‘, 
    `title` varchar(80) NOT NULL DEFAULT ‘‘, 
    `content` text NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `catename` (`catid`) 
) ;  技术分享

 3、数据库操作

技术分享 insert into students(name,sex,age,tel) values(‘wulaoer‘,‘man‘,18,‘151515151‘)
 #插入表数据
delete from students where id =2;
 #删除表数据
update students set name = ‘dn‘ where id =1;
 #修改表数据
select * from students
#查看整个表 技术分享

 4、其他

主键
外键
左右连接

更多mysql操作萌点这里

 Python MySQL API

一、插入数据

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘123456‘,db=‘mydb‘)
 #根据IP、数据用户名、密码、数据库名。连接数据库
cur = conn.cursor()

reCount = cur.execute(‘insert into UserInfo(Name,Address) values(%s,%s)‘,(‘wulaoer‘,‘usa‘))
 #进入数据库,插入一条数据
conn.commit()

cur.close()
conn.close()

print reCount 技术分享 技术分享 技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)
#根据IP、数据用户名、密码、数据库名。连接数据库
cur = conn.cursor()

li =[
     (‘wulaoer‘,‘usa‘),
     (‘dn‘,‘usa‘),
]
#插入的表
reCount = cur.executemany(‘insert into UserInfo(Name,Address) values(%s,%s)‘,li)

conn.commit()
cur.close()
conn.close()

print reCount 技术分享

 注意:cur.lastowid

二、删除数据

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)
#根据IP、数据用户名、密码、数据库名。连接数据库
cur = conn.cursor()

reCount = cur.execute(‘delete from UserInfo‘)
#删除数据
conn.commit()

cur.close()
conn.close()

print reCount 技术分享

 三、修改数据

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)
#根据IP、数据用户名、密码、数据库名。连接数据库
cur = conn.cursor()

reCount = cur.execute(‘update UserInfo set Name = %s‘,(‘alin‘,))
#修改数据
conn.commit()
cur.close()
conn.close()

print reCount 技术分享

 四、查看数据

技术分享 #!/usr/bin/env  python
# --*--coding:utf-8 --*--
# ############################## fetchone/fetchmany(num)  ##############################

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)
#根据IP、数据用户名、密码、数据库名。连接数据库
cur = conn.cursor()

reCount = cur.execute(‘select * from UserInfo‘)
#查看表数据
print cur.fetchone()
print cur.fetchone()
cur.scroll(-1,mode=‘relative‘)
print cur.fetchone()
print cur.fetchone()
cur.scroll(0,mode=‘absolute‘)
print cur.fetchone()
print cur.fetchone()

cur.close()
conn.close()

print reCount



# ############################## fetchall  ##############################

import MySQLdb

conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)
#根据IP、数据用户名、密码、数据库名。连接数据库
#cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
cur = conn.cursor()

reCount = cur.execute(‘select Name,Address from UserInfo‘)

nRet = cur.fetchall()

cur.close()
conn.close()

print reCount
print nRet
for i in nRet:
    print i[0],i[1] 技术分享

 

  分类: python   好文要顶 关注我 收藏该文 技术分享 技术分享 技术分享 吴老二
关注 - 38
粉丝 - 6     +加关注 0 0       ? 上一篇:paramiko 模块安装
? 下一篇:MySQL:MySQL的安装 posted @ 2016-01-13 13:14 吴老二 阅读(585) 评论(0) 编辑 收藏

Python之路:堡垒机实例以及数据库操作

标签:bsp   模块   退出   att   tcsetattr   exp   create   for   nts   

热心网友 时间:2022-05-01 17:44

双因子认证(2FA)是指结合密码以及实物(信用卡、SMS手机、令牌或指纹等生物标志)两种或多种条件对用户进行认证的方法。
双因子认证有哪些形式呢?双因子认证一般是用户名密码再加一种其他方式的认证,例如:短信验证、微信或者QQ授权验证、USB令牌、OTP令牌等等。
举例1:当你进入公司时,必须打卡(你在公司的身份证件)+指纹验证,这就是双因子认证机制
举例2:登录某web网站,输入账号密码之后,还要再输入接收到的短信验证码,这也是双因子认证机制
堡垒机经常成为企业内部安全的薄弱环节,堡垒机内部保存所有的设备资产和权限关系,一旦堡垒机被入侵,则意味很多时候黑客得到了登录服务器、网络设备的权限。堡垒机口令是堡垒机安全的第一道防线,一旦堡垒机密码被其它人拿到,就意味着这个人能使用这个密码所有都的所有权限。
如果用户在行云管家堡垒机设置了开启双因子认证,那么在访问该团队中的所有关键设备时,均会要求进行二次身份认证,目前支持微信或短信两种认证方式,用户可根据公司实际情况自由选择。当然这也意味着开启双因子认证后,需要团队成员在个人资料中绑定微信或手机。
行云管家堡垒机有哪些双因子认证方式?如何开启和使用双因子认证功能?
点击对应运维策略的“策略编辑”按钮,再点击“双因子认证”的编辑图标,打开“修改双因子认证”对话框,并选择对应的双因子策略;
访问关键设备时,访问凭证中将需要输入“验证码”,点击“立即获取”;
您的微信或短信将收到一个四位数字验证码,将验证码回填至访问凭证中即可访问该设备;
行云管家堡垒机的双因子认证机制不仅在事前控制预防,还可以在事中审核拦截操作,用户在用户名密码登录状态时,执行某些敏感指令时微信推送管理员信息,管理员可以验证当前操作者的身份,然后决定通过或者驳回操作者的敏感指令,默认失效时长30分钟。
在行云管家堡垒机中,以下操作均触发双因子认证:重启主机、停止主机、修改主机操作系统密码、修改管理终端密码、创建主机会话、快照回滚、更换系统盘、初始化磁盘、卸载数据盘、挂载数据盘等。

热心网友 时间:2022-05-01 19:02

既然问到堡垒机,我还是有必要回答一下的,这是因为堡垒机确实给我的运维工作履历带来了实际帮助,如果没有堡垒机我可能已经考虑转行了。我就从我的经历说起吧,说来话长,大家慢慢看。

从事运维三年了,自己也曾遇到过各式各样的问题,诸如因认证方式过于简单造成服务器账号被盗、权限划分不明造成的误删数据库文件等问题屡见不鲜,果不其然的印证了“70%的故障均来自内部人员的操作失误”的魔咒。

很显然,问题出在日常运维工作不规范,如果不规范工作中的一举一动,就会不断的犯错,最后导致所有的功劳都变成徒劳。

俗话说的好:常在河边走, 哪能不湿鞋。身边例子很多,随便举一个朋友在群里的对话。

若一不小心执行命令 rm -rf / tmp,如果此时正好拥有root权限,那么后果将不堪设想。

关于rm -rf / tmp 这种错误,对于手快的朋友或者在我们网速比较慢时,出现的概率相当大,当你发现执行完之后,你的心至少是凉了半截。可能大家对自己拥有相当大的自信,老子每次都这样没出过错,唬谁呢。

当出现一次你就明白了,不要认为那些运维事故都是在别人身上,如果你不注意,下一个就是你。

众多运维工作的失误,时刻提醒我们运维人员要建立明确、规范的标准化管理流程,以提高运维效率、降低综合成本,保障业务的连续性。

在这里跟大家分享几个关于rm防止误删除数据的小技巧:

1、先备份,再操作,最好有异机备份,修改配置等先提交版本管理系统再发布到线上;

2、删除文件时使用mv命令替代rm命令,无用的文件先不删除,而是移动到/tmp里观察些许时间;

mv filename.txt /tmp/

3、如果非要使用rm删除,请尽量先使用Tab补全目录,再切换目录再删目录下的数据,能不用通配符就不用通配符。

cd /tmp
rm -f filename_1.txt filename_2.txt

4、如果删除的不是目录,就不要使用“rm -fr”,应采用最小化权限“rm -f”来进行对文件的删除。

至此之后,运维失误确实减少了,但是好景不长,时隔俩月问题又再次重演,而我们还不知道是谁操作的(当时我马上查看了系统日志,但苦于系统日志可读性差、零散、可删除、篡改、并且我们账号与运维人员无法一一对应)!!!

CTO彻底爆发,这次必须从源头彻底根除这个问题,否则你就给我滚蛋。此时的我,非常理解CTO的心情,于是当面立下军令状,杜绝此类事故的再次发生。

目前我们的主机资源规模大概在数百台左右,上面跑着许多不同的业务系统,对于这些资源来说,都有各自独立的一套账号体系,当时为了方便管理,我们是通过一个Excel来维护这些账号信息,使用时,也就存在了多人共用账号的情况。

多人共用账号给我们带来方便的同时,账号本身的安全性也就无法得到保证,导致操作者的身份无法确定,当系统发生问题后,很难确认具体责任人。

为了保证密码的安全性,我们也会制定严格的密码管理策略,诸如密码必须定期修改,密码需保证足够的强度等,但现实执行中,由于管理的资源规模太大和账号数量太多,这一费时费力的操作,往往最终都流于形式,由此引出我们的第一个问题:账号密码管理体系不规范。

在访问控制这块,我们对运维人员数据信息的访问能力和范围并没有做严格的控制与*,导致运维操作流程就像一个“黑盒”,我们并不清楚运维人员:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 川的意思 川是哪里的简称? 川是什么地方的车牌号 川的拼音 川在古代是什么意思 电脑上面的qq里面群课堂屏幕能全屏吗? 川是什么意思? 电脑上同时登陆两个QQ为什么有一个群可以用群课堂,而另一个不可以呢? MAC电脑qq不能开群课堂么? 切牛排应该怎么拿刀叉 吃饭牛排刀叉怎么放 西餐牛排怎么吃刀叉 电脑上怎么设置扣扣主页图片 电脑网页图片显示异常 电脑页面图片泛白 看不清楚怎么办 怎么把电脑上的图片弄到主页、谢 电脑上的视频软件以及各种页面图片都显示不出来怎么办? 进入淘宝电脑端首页,怎样设置成这样?像下面图片一样… 电脑淘宝网店铺首页上的这这请替换该图片要怎么办?请详细点,我前面问了几种办法都没能解决。 为什么我家的电脑网页图片显示不出来? 川26个字母代表哪里? windows系统的双因素认证有什么好的免费产品推荐。 川组词有哪些 川26个字母代表哪里 内网安全的加密系统 “川”字的偏旁部首是什么? windows操作系统开机密码双重验证的方法! 川A 川B 川L等等是什么意思 请问一下,宁盾 双因素 认证能给哪些产品做?大家有推荐不 “川”的成语有哪些? 后激活时双重认证一直收不到验证码,求助 川字该怎么记? 软件安全名词解释 四川有哪四个“川”,这里的川指什么呢? sql server 2008可以双因子登录么 在系统中,数据库的分离和复原是如何进行的? 堡垒机有哪些核心功能?堡垒机的核心功能介绍? 使用云堡垒机,有什么优势? 运维审计系统软件那个好? 为什么要用堡垒机,堡垒机能给公司带来什么?