一、jumpserver的启动

1
2
Jumpserver的启动和重启
[root@test-vm001 install]# /opt/jumpserver/service.sh start/restart

二、按照Jumpserver部署过程结尾的账号信息(admin/wangadmin@123)登陆Jumpserver的web界面

修改admin超级管理员的密码

只修改admin的密码即可,SSH秘钥不需要重新生成

然后注销,使用admin重置后的新密码登陆Jumpserver!

三、下面正式记录下Jumpserver的用户添加、推送及堡垒机方式登陆到目标机器的操作

1. 添加用户组(如下以添加ops用户组为例)

2. 添加用户(如下以添加wangshibo用户为例;注意这个用户添加成功后,也会在Jumpserver部署机上自动生成。那么删除这个用户后,也会自动从部署机上删除)

然后到上面添加wangshibo用户时配置的邮箱里会收到一封邮件,如下:

对于上面邮件里的内容,要注意以下几点:

  • web登录密码:是指使用wangshibo用户登陆Jumpserver的web界面的密码,这个密码在王士博用户登陆到Jumpserver界面后可以修改。
  • 密钥下载地址:是指下载wangshibo用户登陆Jumpserver部署机的密码的地址,可以通过打开邮件里的这个地址进行下载;也可以在wangshibo用户添加成功后,点击Jumpserver界面里"查看用户"->"wangshibo"后面的"下载"按钮。
  • ssh密钥文件密码:是指在使用wangshibo用户的key(即第2步中下载的秘钥)登陆Jumpserver部署机时要输入的密码。

-------------------------------------------------------------------------------------------------------------------------------
特别注意一点:
在Jumpserver里添加的用户的秘钥下载后默认是pem格式的证书文件。Xshell和SecureCRT客户端可以直接使用pem格式的证书文件进行登陆(但是注意低版本的SecureCRT还是需要将这个转化为.pub格式后才能登陆)
做法如下:
1)将下载的这个wangshibo.pem秘钥文件放到任意一台linux主机上进行转化为.pub格式的公钥文件的操作(root账号下操作,并且要保证wangshibo.pem文件上传到linux机器上后的权限是600!)
localhost:Downloads root# ssh-keygen -e -f wangshibo.pem >> wangshibo.pem.pub
Enter passphrase: //注意这里输入的密码就是上面邮件中的"您的ssh密钥文件密码:"
localhost:Downloads root# ls -l wangshibo.*
-rw-------@ 1 kevin staff 1766 Sep 24 20:36 wangshibo.pem
-rw-r--r-- 1 root staff 506 Sep 24 20:39 wangshibo.pem.pub

2)然后将转化后的wangshibo.pem.pub公钥文件拷贝给用户,使用SecureCRT客户端登录Jumpserver部署机。(如下图,PublicKey的方式要推放到最前面)

如下,需要输入的密码即是上面邮件中收到的ssh密钥文件密码(即 9f4ZCpvEiCy3wbS0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
---------------------或者在MAC或linux终端里直接ssh使用.pem秘钥文件登陆------------------------
找到wangshibo.pem的下载路径,使用ssh登陆
localhost:~ root# cd /Users/kevin/Downloads/
localhost:Downloads root# ls -l wangshibo.pem
-rw-r--r--@ 1 kevin  staff  1766 Sep 29 16:06 wangshibo.pem
localhost:Downloads root# ssh -i /Users/kevin/Downloads/wangshibo.pem -p22 wangshibo@172.16.220.128        //需要在root账号下操作。普通用户要在sudo下操作,(sudo可以限制到只能ssh操作,比如:wangshibo     ALL=(ALL)    NOPASSWD: /usr/bin/ssh)
Enter passphrase for key '/Users/kevin/Downloads/wangshibo.pem':               //输入上面邮件中收到的ssh密钥文件密码(即 9f4ZCpvEiCy3wbS0)
Last login: Fri Sep 29 17:08:19 2017 from 10.45.225.9
 
Welcome to aliyun Elastic Compute Service!
 
 
###    欢迎使用Jumpserver开源跳板机系统   ###
 
        1) 输入 ID 直接登录.
        2) 输入 / + IP, 主机名 or 备注 搜索.
        3) 输入 P/p 显示您有权限的主机.
        4) 输入 G/g 显示您有权限的主机组.
        5) 输入 G/g + 组ID 显示该组下主机.
        6) 输入 E/e 批量执行命令.
        7) 输入 U/u 批量上传文件.
        8) 输入 D/d 批量下载文件.
        9) 输入 H/h 帮助.
        0) 输入 Q/q 退出.
 
Opt or ID>:

还可以做成expect脚本方式登陆:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
将下载的用户密钥文件(如wangshibo.pem)放到一台linux服务器的一个用户家目录(比如/home/wangshibo)下,编写expect脚本(安装参考:http://www.cnblogs.com/kevingrace/p/5900303.html)
操作记录如下(wangshibo用户在这台linux服务器上有sudo ssh的权限):
[wangshibo@sh-sre-man01 ~]$ pwd
/home/wangshibo
 
[wangshibo@sh-sre-man01 ~]$ cat shanghai-jump
#!/bin/expect 
set timeout 30 
spawn sudo ssh -i /home/wangshibo/wangshibo.pem -p22 wangshibo@122.161.155.17
expect "'/home/wangshibo/wangshibo.pem':" 
send "9f4ZCpvEiCy3wbS0\r" 
interact
 
[wangshibo@sh-sre-man01 ~]$ ./shanghai-jump
spawn sudo ssh -i /home/wangshibo/wangshibo.pem -p22 wangshibo@122.161.155.17
Enter passphrase for key '/home/wangshibo/wangshibo.pem':
Last login: Mon Oct 16 12:43:26 2017 from 111.110.111.141
 
Welcome to aliyun Elastic Compute Service!
 
 
###    欢迎使用Jumpserver开源跳板机系统   ###
 
        1) 输入 ID 直接登录.
        2) 输入 / + IP, 主机名 or 备注 搜索.
        3) 输入 P/p 显示您有权限的主机.
        4) 输入 G/g 显示您有权限的主机组.
        5) 输入 G/g + 组ID 显示该组下主机.
        6) 输入 E/e 批量执行命令.
        7) 输入 U/u 批量上传文件.
        8) 输入 D/d 批量下载文件.
        9) 输入 H/h 帮助.
        0) 输入 Q/q 退出.
 
Opt or ID>: p
[ID ] 主机名    IP               端口  系统用户  备注
[0  ] sh-sre-man01    111.110.111.141   2200   ['ops''devs''work'
[1  ] sh-api-dmk01    111.110.111.140   22     ['ops''devs''work'
[2  ] sh-api-dmk02    111.110.111.139   22     ['ops''devs''work'
[3  ] sh-inf-deploy01 111.110.111.146   22     ['ops''devs''work'
[4  ] sh-sre-monitor01 111.110.111.148   22     ['ops''devs''work'
[5  ] sh-db-dmk01     111.110.111.142   22     ['ops''devs''work'
[6  ] sh-db-dmk02     111.110.111.143   22     ['ops''devs''work'
[7  ] sh-srv-dmk02    111.110.111.144   22     ['ops''devs''work'
 
Opt or ID>: 2
[ID] 系统用户
[0 ] ops
[1 ] devs
[2 ] work
 
授权系统用户超过1个,请输入ID, q退出
ID>: 0
Last login: Sat Oct 14 23:30:26 2017 from 122.161.155.17
 
Welcome to aliyun Elastic Compute Service!
 
[ops@sh-api-dmk02 ~]$

-------------------------------------------------------------------------------------------------------------------------------

3. 添加资产组、机房

4. 现在开始添加机器资产(也就是添加要从跳板机登陆管理的目标机器)

注意一点:可以一台台添加,也可以选择使用批量添加,有批量添加的模版。这里我暂且使用单台添加作为演示。另外:管理用户是指目标客户机上真实存在用户,这个最好填目标主机的root用户(以及目标主机的root的真实密码),如果填写真实存在的普通用户,则它必须拥有NOPASSWD: ALL sudo权限。管理用户的作用是用于推送系统用户(也就是说这个管理用户最好使用root,如果是非root账号,那么它必须拥有NOPASSWD: ALL sudo权限!)

如下添加三台主机资产

通过"编辑"主机,将其划到相应的机房里,完善主机信息

5. 下面开始权限管理的设置
先添加Sudo,这里的sudo其实是Linux中的sudo命令别名,一个sudo别名包含多个命令, 系统用户关联sudo就代表该系统用户有权限sudo执行这些命令。当然可以创建多Sudo,划分给不同权限的用户。如下,创建两个Sudo

============下面是使用过的一个sudo授权==============

如上,设置sudo的别名,设置后,系统用户需要绑定这些sudo的别名,然后进行推送(后续追加sudo命令,就再次进行"重新推送")
推送成功后,查看目标机器的/etc/sudoers文件,可以看到设置的sudo信息

===============================================================

接着添加系统用户。系统用户是服务器上建立的一些真实存在的可以ssh登陆的用户,如work,ops,dev等,系统用户可使用资产的管理用户将其推送到添加的目标资产服务器上。这里我添加了三个系统用户,分别为work、ops、dev(添加时的用户密码随便定义,比如work@123、ops@123、dev@123)。这些系统用户在Jumpserver界面里添加成功后,会自动推送到添加的目标主机上。
特别需要注意一点:这里的系统用户不能使用root!必须是非root用户!然后通过定义的各种sudo进行不同的相关操作(比如允许ops切换到root账号下)

========创建上面系统用户的时候可能报错========

1
2
3
4
5
6
报错:'module' object has no attribute 'getStrongPrime'
 
解决办法:
注释/usr/lib64/python2.6/site-packages/Crypto/Util/number.py文件中的下面两行,然后重启jumpserver即可
    #if _fastmath is not None:
    #    return _fastmath.getStrongPrime(long(N), long(e), false_positive_prob, randfunc)

系统用户创建好之后,一定要记得点击"推送",将这些系统用户及其密码、sudo的信息推送到添加的目标服务器上。当然,后续要是在jumpserver的界面里删除这个系统用户,那么目标机器上也会自动删除这个系统用户!如下,将这三个系统用户都推送到目标机器上。如果推送成功,则会出现一个类似"系统用户 work 推送成功[ test-vm03,test-vm02,test-vm04 ]"的提示。

可以在系统用户列表,点击系统用户名称,进去查看系统用户的推送情况。比如查看work系统用户的推送情况

---------------------------------------------------------------------------------------------------
新增主机的推送:
系统用户列表->点击系统用户名称(比如work)->work-未推送主机->点击新增主机,进行推送操作
---------------------------------------------------------------------------------------------------

推送成功后还可以直接到目标机器上查看推送效果。比如到test-vm02机器上查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@test-vm02 ~]# cat /etc/passwd
.......
work:x:1000:1000::/home/work:/bin/bash
ops:x:1001:1001::/home/ops:/bin/bash
dev:x:1002:1002::/home/dev:/bin/bash
 
[root@test-vm02 ~]# cat /etc/sudoers
......
Cmnd_Alias SUPERADMIN = /bin/*, /sbin/*
work ALL = (root)  NOPASSWD: SUPERADMIN
ops ALL = (root)  NOPASSWD: SUPERADMIN
Cmnd_Alias DEVADMIN = /usr/bin/vim/usr/bin/tar/usr/bin/gzip/usr/bin/rsync/usr/bin/tail
dev ALL = (root)  NOPASSWD: DEVADMIN
 
如上,说明test-vm02机器已经被推送成功了。其他机器的检查方法跟上面一样。

-----------------------------------------------------------------------------------------------------------------------

这里说下推送失败的案例1:
在系统用户列表,点击系统用户名称,查看系统用户推送详情,把鼠标放到失败按钮上,会看到失败的原因。

可以登陆其中的一台服务器比如test-vm02上,查看/var/log/message日志信息,再结合上面截图中的报错,原因是执行/etc/sudoers文件时,发现没有work用户!也就是说work用户没有useradd创建成功!那么就尝试在test-vm02机器上手动创建work账号,如下:

果然是useradd创建系统用户失败导致的!解决办法:

1
[root@test-vm02 ~]# rm -f /etc/gshadow.lock

这样就OK了!可以再次手动useradd创建work账号试试,创建成功后再userdel删除它!
最后别忘记在/etc/sudoers文件里删除底部添加的work账号的sudo设置信息,因为这是推送失败的那次添加的sudo信息,删除后重新推送下,否则配置信息就会重叠!
其他服务器的处理方法跟这个一样!

------------------------------------------------------------------------------------------------------------------------

再说下推送失败的案例2

解决方案:http://www.cnblogs.com/kevingrace/p/5893121.html
修改后,可以重启jempserver(即/opt/jumpserver/server.sh restart)

------------------------------------------------------------------------------------------------------------------------

推送失败的案例3

1
2
3
4
5
推送用户的时候,如下报错:
Aborting,target uses selinux but python bindings(libselinux-python)aren‘t installed
 
解决办法:
yum install -y libselinux-python

=======================================================================
推送系统用户失败的案例4:SSH Error: Permission denied (publickey,password).....
原因可能是:1)添加资产的时候,填写的"管理用户名"和"密码"有误所致的! 2)jumpserver部署机器在ssh登陆目标机器时,报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!。即在jumpserver部署机的/root/.ssh/known_hosts文件里删除目标机器的连接信息就行了。

------------------------------------------------------------------------------------------------------------------------

最后进行"授权规则"的创建

到此,Jumpserver堡垒机的设置已完成!

四、下面正式记录下Jumpserver堡垒机的使用

注销admin用户登陆的Jumpserver,使用wangshibo用户登陆Jumpserver的web界面

点击主机后面的"连接"按钮,选择一个系统用户,比如work用户,然后在webshell里面就能登陆主机了!(其他用户的操作方法与这个是一样的)

也可以直接使用下载的wangshibo用户的秘钥直接登陆到堡垒机上进行操作(登陆方式在上面已经介绍了,使用SecureCRT客户端登录)

五、Jumpserver其他功能介绍

1. 日志审计(记录了服务器的在线情况、每个用户的登陆历史、命令记录、上传下载记录)。也可以直接在"仪表盘"中查看所有机器的综合信息!

2. 上传下载功能(前提是Jumpserver部署机上要有rz、sz命令,这个在部署环境之前就已经yum lrzsz安装了。上传下载功能都只能在非admin管理员账号下操作)

2.1)上传功能
首先使用wangshibo用户登陆Jumpserver界面,将需要上传的文件或者目录拖拽上去,或者点击下面的Drop files to upload"后在弹出的提示框中选择需要上传的文件或目录,然后点击"全部上传",注意:上传文件默认放在目标服务器的/tmp目录下,因为tmp下临时共享目录,普通用户都有操作权限。

然后就到test-vm02、test-vm03、test-vm04服务器上查看是否已成功上传了文件(如下以test-vm02为例)

也可以在命令行进行上传操作,也是上传到对应服务器的/tmp目录下

2.2)下载功能
注意:下载文件的路径一定要是真实存在目标主机的/tmp临时共享目录下的,其他目录路径无效!并且路径要精确到文件!!!(下载后的文件默认自动打包)如下:

可以在命令行进行下载操作,下载路径要是对应服务器的/tmp目录下的文件。下载后以打包形式存在。

3. 批量执行命令:

除此之外,也可以使用普通用户(比如wangshibo)登陆jumpserver界面,在界面里批量执行:

4. "设置功能",如下设置后,添加"资产"的时候,在"管理账号"这一项就可以选择"使用默认"了。

--------------------------------------------------------------------------------------------------------------------------
最后说下在Jumpserver里面批量添加主机资产的操作(先导出模版,然后在模版里填好主机信息,最后再导入模版文件)。如下导出的模版更名为jumpserver.xlsx:

注意:添加主机(或批量添加主机)后,推送系统用户,有时会失败,比如报错SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password或认证失败。 这时可以尝试删除主机,重新添加主机,然后重新推送系统用户还有,用于推送系统用户的管理用户(如上,选用root作为管理用户)的密码一定要正确!(一定要是真实存在于主机上的用户的真实密码!,否则推送就会失败)

--------------------------------------------------------------------------------------------
发现jumpserver部署机在堡垒机环境搞好后,不能正常su切换到其他用户下,报错如下:
"没有该用户,或许你是以root运行的 No that user."

解决办法:注释掉connect.py文件的下面两行判断设置即可(注释后不需要重启jumpserver服务)!
[root@test-vm01 jumpserver]# cd
[root@test-vm01 ~]# cd /opt/jumpserver
[root@test-vm01 jumpserver]# vim connect.py
#if not login_user: # 判断用户是否存在
# color_print('没有该用户,或许你是以root运行的 No that user.', exits=True)

然后再尝试su切换用户就可以了。

总结:
jumpserver堡垒机在刚部署好的时候,本机使用su切换到其他用户下,默认是不行的,需要按照上面的方式解决后才能su切换。
堡垒机本机上su切换到其他用户,都是会进入到堡垒机使用界面的(如上),但是只有推送后的系统用户才能成功跳转到其他机器上。

--------------------------------------------------------------------------------------------------
jumpserver里面的用户(如上的wangshibo)除了可以用邮件里的秘钥在远程登陆以外,还可以直接使用密码在远程ssh登陆(只是在jumpserver 界面里创建用户时,默认没有设置密码,可以在jumpserver部署机上手动给用户设置密码,而后就可以在远程使用用户+密码登陆堡垒机了)。


---------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
使用wangshibo用户登录Jumpserver界面,在Web terminal里登录work、ops、dev系统用户失败!    
在jumpserver部署机上使用"tail -f /var/log/message" 或者"salt-minion -l debug"命令查看,
发现有错误如下:
.......
[ERROR   ] DNS lookup of 'salt' failed.
[ERROR   ] Master hostname'salt' not found. Retrying in 30 seconds
 
原因是:salt master端的minion_id不对导致的
 
解决办法:
重启jumpserver服务即可!(在jumpserver部署机上查看是否有/etc/salt/minion_id文件,如果有就果断删除,然后再重启jumpserver服务)
 
[root@test-vm001 ~]# rm -f /etc/salt/minion_id
[root@test-vm001 ~]# /app/jumpserver/service.sh restart
Stopping jumpsever service:                                [  确定  ]
Starting jumpsever service:                                [  确定  ]
 
然后再在Web terminal里登录work、ops、dev系统用户就ok了。

---------------------------------------------------------------------------------------------
使用秘钥和秘钥文件密码登录Jumpserver失败

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1)xshell上使用秘钥登录,输入秘钥密码后,报错:所选的用户密码未在远程主机上注册,请再试一次。
解决办法:确保jumpserver界面里创建好用户后,在jumpserver服务器的/etc/passwd/home目录下有该用户信息。
 
2)报错如下:
[root@jumpserver01 home]# tail -f /var/log/secure
......
Mar 21 14:42:19 jumpserver01 sshd[141831]: Authentication refused: bad ownership or modes for directory /home/yangkai
 
解决办法:/home/yangkai/.ssh的权限要是700,/home/yangkai/.ssh/authorized_keys文件权限要是600
[root@jumpserver01 ~]# ll -d /home/yangkai
drwx------ 4 yangkai yangkai 4096 3月  21 09:43 /home/yangkai
 
[root@jumpserver01 ~]# ll -d /home/yangkai/.ssh
drwx------ 2 yangkai yangkai 4096 3月  21 09:43 /home/yangkai/.ssh
 
[root@jumpserver01 ~]# ll /home/yangkai/.ssh/authorized_keys
-rw-------- 1 yangkai yangkai 416 3月  21 11:41 /home/yangkai/.ssh/authorized_keys

============================================================================
需要注意一点:
部署了jumpserver堡垒机环境的服务器,ssh直接登录的话,只能使用root账号。非root账号ssh登录的话,登录后直接进入的是jumpserver欢迎界面,而不能直接进入系统。

jumpserver堡垒机只有在首次推送的时候,需要用到系统账号,如上面的root、work、ops、dev等,在推送操作完成后,鉴于安全登录考虑,可以禁止这些系统用户直接登录系统,只允许通过堡垒机唯一入口进入。
禁止用户直接ssh登录的方法:
1)使用useradd或passwd命令锁定账号登录。https://www.cnblogs.com/kevingrace/p/6109818.html
2)在ssh配置文件里操作。https://www.cnblogs.com/kevingrace/p/6110842.html

=======生产系统服务器登录安全======

1
2
3
4
5
6
7
8
9
1)堡垒机登录
- 各用户登录:账号+key证书+证书文件密码(创建时随机产生16位密码)。
- root登录:运维管理员所用,密码每三个月重置一次,16位密码。
 
2)服务器登录
- 登录入口唯一:只能通过堡垒机这唯一的入口进行跳转登录,禁止通过系统账号登录。
- 账号锁定:root、ops、app、dev、omd账号被锁定(usermod命令),禁止直接通过这些账号远程登录服务器(锁定后,个别业务场景下做的ssh互信关系不受影响)。
  注意:通过usermodpasswd锁定账号,不会对做了ssh互信的机器造成登录影响;但要是在sshd_config里做了DenyUsers的限制,则就彻底禁止了ssh动作,互信也受影响。
- 网络限制:服务器均为内网ip,根据业务做网络隔离,不通业务服务器之间的ip禁止通信。

到此,关于Jumpserver堡垒机的设置和使用已经暂时介绍完毕。(注意:除了使用秘钥及秘钥文件密码登录jumpserver,还可以直接使用密码登录,给jumpserver登录用户在jumpserver服务器上重置一个密码即可)

 

jumpserver3.0页面配置的更多相关文章

  1. JSP的那些事儿(2)---- DWR2.0 的配置和使用

    JSP的那些事儿(2)----DWR2.0 的配置和使用 分类: Web开发 JAVA 2009-04-23 15:43 999人阅读 评论(0) 收藏 举报 jspdwrjavascriptserv ...

  2. Apache2.2+Tomcat7.0整合配置详解

    一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...

  3. VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程 转载

    VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程     转载 #include <stdio.h>#include &l ...

  4. 使用Web页面配置ESP8266的参数

    前言 使用Web页面配置ESP8266的参数相对于使用串口AT指令配置更加直观和简单.与配置路由器方式类似. 基本思路 基本思路是ESP8266工作AP模式下,作为TCP Server监听TCP Cl ...

  5. VUE 多页面配置(二)

    1. 概述 1.1 说明 项目开发过程中会遇到需要多个主页展示情况,故在vue单页面的基础上进行配置多页面开发以满足此需求,此记录为统一配置出入口. 2. 实例 2.1 页面配置 使用vue脚手架搭建 ...

  6. Struts2框架笔记02_API_结果页面配置_数据的封装

    目录 1. Struts2的Servlet的API的访问 1.1 方式一:完全解耦合的方式 1.1.1 环境搭建 1.1.2 代码 1.1.3 测试 1.1.4 向域对象中存入数据 1.2 方式二:使 ...

  7. 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置)

    点击返回:自学Aruba之路 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置) 步骤1 建立AP Group,命名为test-group 步骤2  将AP加入到AP G ...

  8. Jumpserver3.0部署(Centos6.x)

    1.jumpserver基础环境准备[root@jumpserver ~]# yum -y install epel-release[root@jumpserver ~]# yum clean all ...

  9. web.xml里welcome-file欢迎页面配置及web.xml简介

    web项目欢迎页面的配置 <welcome-file-list> <welcome-file>/WEB-INF/index.html</welcome-file> ...

随机推荐

  1. 利用程序随机构造N个已解答的数独棋盘

    高级软件工程第二次作业:利用程序随机构造N个已解答的数独棋盘,代码如下: package SudokuGame; /** * 解决这个问题使用的是回溯+剪枝的算法 * 基本思想:不断地将每个格子可填入 ...

  2. 一些关于SEO优化的笔记

    高级搜索指令: 双引号:“xxx” 代表完全匹配的搜索 减号:-(减号前面必须是空格,后面必须没有空格)代表搜索不包含减号后面的词的页面 filetype:用于搜索特定文件格式(百度支持的文件类型:P ...

  3. 洛谷 P1462 通往奥格瑞玛的道路——二分+spfa

    上一波链接 https://www.luogu.org/problem/P1462 这道题我们考虑二分答案 然后每次跑一次spfa判断是否能够到达n点 tips:在不考虑负权边的前提下我们写最短路最好 ...

  4. List<Map>去重并合并数量

    今天在查询出的sql中,出现了部门名称和部门ID有重合的数据!当然这样在页面上展示也会容易一起误导!查询出的数据结构如下图 希望根据deptid中 >最后一个节点id把deptname 合并成& ...

  5. 64.Find the Duplicate Number(发现重复数字)

    Level:   Medium 题目描述: Given an array nums containing n + 1 integers where each integer is between 1 ...

  6. css中的文本字间距离、行距、overflow

    css字间距.div css字符间距样式实例1.text-indent设置抬头距离css缩进 div设置css样式text-indent : 20px; 缩进了20px 2.letter-spacin ...

  7. python字符串方法学习笔记

    # 一.字符串大小写转换# 字符串首字符大写print("hello world".capitalize())# 将字符串变为标题print("hello WORLD&q ...

  8. MMM实现Mysql高可用

    MySQL主主同步方案 l  MySQL主主+Keepalived l  MySQL+DRBD+Heartbeat 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主主方案, ...

  9. h5py库

    参考文献:http://docs.h5py.org/en/latest/high/dataset.html h5py文件存放数据集(dataset)和组(group). dataset类似数组类的数据 ...

  10. C++在windows平台下不存在strptime函数,可以绕过该函数

    https://blog.csdn.net/u011077672/article/details/50524469?utm_source=blogxgwz1