Ubuntu 下设置自己的“超级计算机集群”
来源:互联网 发布:linux java打开excel 编辑:程序博客网 时间:2024/05/25 23:28
在本文中我将一步一步指导大家设置自己的“超级计算机集群”,通过Ubuntu MPI Cluster平台,借助John the Ripper实现在多台计算机上对加密过的目标进行暴力破解。当然这一切应以学术研究为目的。 计算机上具备四核处理器的朋友有福了。尽管Ubuntu 软件库中的“john”二进制代码原本只针对于单核运行,但我的设置将尝试使其在四核计算机上运行效率更高,耗时更少。 本文的出发点是将问题表达得通俗易懂,以使普通用户便于理解掌握,因此我决定不在其中涉及NIS,NFS,BIND或诸如此类的复杂技术。读者应该 不必花费数天时间阅读有关Linux系统管理员知识的教材或手册,也能在家中轻松建立并玩转计算机集群系统。我制作的应用基于Ubuntu 10.04 Server,因为它是迄今为止最常用的Linux工具,同时也是一种蕴涵长效机制的版本,在2015年之前可以一直适用。 前言 本文中谈到的集群实施方案并不会对具备高实用性及安全性的运行环境构成威胁。 背景 我发现不得不从破解自己设置的一个尘封多年早已忘却的老密码开始着手。在搜集了几台手边的计算机之后,我开始尝试让它们协同工作。 本文的诞生,是极端沮丧的心情、过量的咖啡因加上一整个不眠之夜的产物。 基本要求 需要至少两台可运行Ubuntu Linux 10.04版本且已联网的计算机。 “John”并不需要太大的带宽。 服务器要求 一个静态IP地址或DHCP中保留的IP。 需要用到的软件包 以下软件包是必备的: petur@server:~$ sudo apt-get install libmpich1.0-dev libmpich-mpd1.0-dev libmpich-shmem1.0-dev mpich2 mpich2-doc john openssh-server build-essentials 默认情况下,/etc/hosts文件应如下所示: 127.0.0.1 localhost 127.0.1.1 server.petur.eu server #下列内容是采用IPv6协议的主机 fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 首先把你的IP地址修改为127.0.1.1。 处应为你的FQDN,而处应为你的计算机主机名。 通过执行下列命令查找你的IP: petur@server:~$ ifconfig|grep “inet addr” inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0 inet addr: 127.0.0.1 Mask:255.0.0.0 修改后/etc/hosts下的内容应如下所示: 127.0.0.1 localhost 10.0.0.1 server.petur.eu server #下列内容是采用IPv6协议的主机 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 新建一个名为“cluster”(集群)并在其路径中加入~/bin/代码。 我发现在每台计算机上都对’cluster’采取相同的设置步骤是最便捷的做法。 petur@server:~$ sudo useradd -m -s /bin/bash cluster petur@server:~$ sudo passwd cluster Enter new UNIX password:(输入新的UNIX密码) Retype new UNIX password:(再次输入新的UNIX密码) passwd: password updated successfully(密码:密码更改成功) petur@server:~$ sudo su – cluster -c “mkdir ~/bin;export PATH=~/bin:$PATH” MPI的应用基于以下配置文件: ~/.mpd.conf 注:此文件以a开头且必须配合chmod 600才能生效。 此文件在你的密码中包含一个单独的命令行”secretword=<password>” replace <password>,其内容必须与集群中所有~/.mpd.conf中的相关内容相同。 ~/mpd.hosts 此文件中包含所有集群节点及服务器的列表,其格式为“host:number-of-cpu-cores”, fx。如果您的计算机具备四核心处理器,则将10.0.0.2设置为10.0.0.2:4。 如果你只是想使用MPICH的功能而不在乎可用处理器核心的数量,那么该数值可以设置得低于实际情况。 举例说明,如果服务器具备四核心处理器,你可能希望将数值设置为:3,而不是:4,这样服务器可以同时处理其它一些运算。 千万不要预设localhost或127.0.0.1这类你必须连接网络才能使用的IP。 检查处理器核心数量,并创建配置文件。 cluster@server:~$ touch ~/.mpd.conf cluster@server:~$ chmod 600 ~/.mpd.conf cluster@server:~$ echo secretword=pass>~/.mpd.conf cluster@server:~$ /sbin/ifconfig|grep “inet addr” cluster@server:~$ /sbin/ifconfig|grep “inet addr” inet addr:127.0.0.1 Mask:255.0.0.0 cluster@server:~$ cat /proc/cpuinfo|grep processor|wc –l cluster@server:~$ echo 10.0.0.1: 1 >~/mpd.hosts 设置完成后,通过执行以下指令检查是否运行正常: mpdallexit – shut down the cluster cluster@server:~$ mpdtrace cluster@server:~$ mpdallexit 如果设置方面没有任何错误,那么你的指令将全部被正确执行。如果出现问题,请检查你的~/.mpd.cof的权限设置及/etc/hosts和~/mpd.hosts的内容是否正确。 在www.bindshell.net/tools/johntheripper处可以获取具备MPI补丁版本的John the Ripper。 cluster@server:~$ mkdir source cluster@server:~$ cd source cluster@server:~/source$ wget http://www.bindshell.net/tools/johntheripper/john-1.7.2-bp 17-mpi8.tar.gz 从src目录中解压并运行make指令(若你的计算机分辨率不足,请尝试使用make|less指令)。 cluster@server: ~/source$ tar -zxf john-1.7.2-bp17-mpi8.tar.gz cluster@server: ~/source$ cd john-1.7.2-bp17-mpi8/src/ cluster@server: ~/source/john-1.7.2-bp17-mpi8/src$ make 此时你会看到一个选项清单。要创建 John the Ripper,键入保持系统清空运行所需的系统如下所示: linux-x86-mmx Linux, x86 with MMX linux-x86-sse Linux, x86 with SSE2 (推荐) linux-x86-any Linux, x86 linux-x86-64 Linux, AMD x86-64, 64-bit native w/SSE2 (推荐) linux-x86-64-mmx Linux, AMD x86-64, 32-bit with MMX 我发现linux-x86-sse2在我基于Intel架构的工作站上运行效果最好。 cluster@server: ~/source/john-1.7.2-bp17-mpi8/src$ make clean linux-x86-sse2 如果程序编译过程没问题,测试一下它能否正常工作。 cluster@server: ~/source/john-1.7.2-bp17-mpi8/src$ ../run/john -format=DES –test Benchmarking: Traditional DES [128/128 BS SSE2]… DONE Many salts: 1994K c/s real, 1994K c/s virtual Only one salt: 1658 c/s real, 1654K c/s virtual 将你新编译出的可执行文件移动至~/bin下。 运行John程序并确保它是_mpi版本。 如果仍然无法正确执行,那一定是你设置的路径出了问题。 cluster@server: ~/source/john-1.7.2-bp17-mpi8/src$ john|grep version John the Ripper password cracker, version 1.7.2_bp17_mpi 每次在集群中新增节点,都需要遵循下列操作: 该节点的IP地址为10.0.0.2 前期准备 一个静态IP地址或DHCP中保留的IP。 网络配置 遵循服务器配置中的相同步骤,但注意过程中要使用正确的IP地址。 必备的软件包。 与服务器设置时的要求相同。 用户配置 为集群选择与你在服务器上所设置的相同的密码。 petur@node1:~$ sudo useradd -m -s /bin/bash cluster petur@node1:~$ sudo passwd cluster Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully petur@node1:~$ sudo su – cluster -c “mkdir ~/bin;export PATH=~/bin:$PATH” MPICH配置 下列命令应被从服务器上而非新节点上执行。 节点上的密码设置与服务器相比,减少了SSH环节。 cluster@server:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/cluster/.ssh/id_rsa): Created directory ‘/home/cluster/.ssh’ Enter passpharse (empty for no passpharse): Enter same passpharse again: Your identification has been saved in /home/cluster/.ssh/id_rsa. Your public key has been saved in /home/cluster/.ssh/id_rsa.pub. The key fingerprint is: 0f:d7:c4:14:cf:06:11:d5:80:ec:1f:c3:f3:3b:7f:22 cluster@server The key’s randomart image is(随机密钥图片如下): [picture omitted(图片省略)] cluster@server:~$ ssh cluster@10.0.0.2 mkdir -p .ssh cluster@10.0.0.2′s password: cluster@server:~$ cat .ssh/id_rsa.pub | ssh cluster@10.0.0.2 ‘cat>>.ssh/authorized_keys’ cluster@10.0.0.2′s password: cluster@server:~$ ssh cluster@10.0.0.2 ‘cat /proc/cpuinfo|grep processor|wc -l’ 2 cluster@server:~$ echo 10.0.0.2:2 >> ~/mpd.hosts cluster@server:~$ for i in `cut –delimiter=: -f1 ~/mpd.hosts`;do scp ~/.mpd.conf cluster@$i:~;scp ~/mpd.hosts cluster@$i:~;done The authenticity of host ’10.0.0.1 (10.0.0.1)’ can’t be established. RSA key fingerprint is 2d:94:c6:40:b0:02:04:d9:86:c8:16:f3:e6:a7:9f:35. Are you sure you want to countinue connecting (yes/no)? Yes Warning: Permanently added ’10.0.0.1′ (RSA) to the list of known hosts. cluster@10.0.0.1′s password: mpd.conf 100% 16 0.0KB/s 00:00. cluster@10.0.0.1′s password: mpd.hosts 100% 22 0.0KB/s 00:00 mpd.conf 100% 16 0.0KB/s 00:00. mpd.hosts 100% 22 0.0KB/s 00:00 现在将以下新命令行添加至服务器上/etc/hosts下的文件中: 10.0.0.2 node1 最后一步,将所有节点计算机上的/etc/hosts下的内容替换为服务器上/etc/hosts下的新内容。如果这一步没有完成,那么当你尝试启动群集时,将会提示以下错误: mpdboot_server (handle_mpd_output 407): failed to handshake with mpd on 10.0.0.2; recvd 安装John the Ripper 与服务器上的过程相同。 基本命令 使用’mpdboot –verbose –ncpus=1 -n 2′指令启动群集 cluster@server:~$ mpdboot –verbose –ncpus=1 -n 2 running mpdallexit on server LAUNCHED mpd on server via RUNNING: mpd on server LAUCNHED mpd on 10.0.0.2 via server RUNNING: mpd on 10.0.0.2 检查集群是否处于工作状态 mpdtrace –列出集群中的所有节点 mpiexec -np 3 hostname,意思是使用三个处理器核心运行hostname指令。 cluster@server:~$ mpdtrace server node1 cluster@server:~$ mpiexec -np 3 hostname server node1 node1 mpdallexit – 关闭集群 cluster@server:~$ mpdallexit 借助MPI集群破解密码 我将以一个简单的MD5散表为例: cluster@server:~$ echo user:47584a15f1ba6c65da3a2ef8e43e606b > crackme1.md5 cluster@server:~$ mpdboot –ncpus=2 -n 2 下面两行指令必须在一个命令行中输入 cluster@server:~$ for i in `cut –delimiter=: -f1 ~/mpd.hosts`;do scp ~/crackme1.mp5 cluster@$1:~;done 上述命令被用来编写易于集群执行的文件。 — distributer.sh begins — #!/bin/bash # usage: ./distributer.sh filename for x in `cut –delimiter=: -f1 ~/mpd.hosts`;do scp $1 cluster@$i:~;done — distributer.sh ends — 一旦找到密码立刻使用Ctrl+C中止程序。 cluster@server:~$ mpiexec -np 3 john –format:raw-MD5 crackme1.md5 Loaded 1 password hash (Raw MD5 [raw-md5 SSE2]) Loaded 1 password hash (Raw MD5 [raw-md5 SSE2]) Loaded 1 password hash (Raw MD5 [raw-md5 SSE2]) petur1 (user) Process 2 completed loop. Threat: 2 guesses: 1 time 0:00:00:02 (3) c/s: 5616K trying: petciL – petusc 使用之后,一定记得及时关闭集群服务器。 cluster@server:~$ mpdallexit 原文地址:http://www.petur.eu/blog/?p=59服务器配置
网络配置
用户配置
MPICH设置
安装John the Ripper
配置额外的节点
- Ubuntu 下设置自己的“超级计算机集群”
- 组装自己的tesla超级计算机
- Ubuntu下的超级用户root密码设置 & 用户切换
- ubuntu 超级用户的设置
- 自己动手构建的超级计算机-----建立树莓派集群
- 构建自己的基于 Java 的超级计算机
- (收藏)构建自己的基于 Java 的超级计算机
- 构建自己的基于 Java 的超级计算机
- 构建自己的基于Java的超级计算机
- 构建自己的基于Java的超级计算机
- 构建自己的基于Java的超级计算机
- 构建自己的基于 Java 的超级计算机
- 组装属于您自己的Tesla个人超级计算机
- 有了 Linux,你就可以搭建自己的超级计算机
- ubuntu设置超级用户的密码
- ubuntu下apt-get的超级作用。
- ubuntu下超级终端minicom的配置
- ubuntu下minicom超级终端的使用方法
- jquery ajax 多级select 菜单联动加载实现
- ubuntu全面介绍
- ubuntu10启动window
- 分享一个C#获取网络链接状态的几种方法
- sqlite 中判断某个表是否存在的方法
- Ubuntu 下设置自己的“超级计算机集群”
- perl 正则内插变量
- java2wsdl+Axis2+hibernate开发webservice学习(2) -自定义module
- 一步一步学Linq to sql(九):其它补充
- 如何在vc中编写 WebService
- android横竖屏总结
- Linux Mount NTFS分区造成的权限问题的解决方案
- 让Apache支持cURL
- Task synchronization