Shellinabox与Ipmitool
Shellinabox简介
Openstack的Ironic组件中有一个部分提供了shellinabox来调用ipmitool以实现访问机器的console的功能
通常情况下,我们在访问任何远程服务器时,会使用常见的通信工具如OpenSSH和Putty等。但是,有可能我们在防火墙后面不能使用这些工具访问远程系统,或者防火墙只允许HTTPS流量才能通过。不用担心!即使你在这样的防火墙后面,我们依然有办法来访问你的远程系统。而且,你不需要安装任何类似于OpenSSH或Putty的通讯工具。你只需要有一个支持JavaScript和CSS的现代浏览器,并且你不用安装任何插件或第三方应用软件。
这个shellinabox,发音是Shell In A Box,是由Markus Gutschke开发的一款自由开源的基于Web的Ajax的终端模拟器。它使用AJAX技术,通过Web浏览器提供了类似原生的 Shell 的外观和感受。
Ironic中的实现
在ironic.drivers.modules.ipmitool.py
中:
1 | class IPMIShellinaboxConsole(base.ConsoleInterface) |
在ironic.drivers.modules.console_utils.py
中:
1 | def start_shellinabox_console(node_uuid, port, console_cmd): |
这里的CONF.console.terminal
就是shellinabox
。
安装shellinabox
在Centos
上安装shellinabox
,可以使用yum
安装与源码编译安装,使用yum
安装需要先打上epel
的repo
1 | sudo yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm |
编译安装的话源码地址在此(需越墙):
1 | wget https://shellinabox.googlecode.com/files/shellinabox-2.14.tar.gz |
使用shellinabox
常用参数为-b
、-t
、-s
1 | -b, --background[=PIDFILE] run in background |
这里主要说下-s
参数,这个参数的意思相当于给这个服务注册应用地址。-s
参数的详细说明:
1 | One or more --service arguments define services that should be made available |
举例说明
1 | shellinaboxd -b -t -s /:LOGIN -s /date:nobody:nogroup:/:date |
这表示当前这个shellinabox
服务有两个调用地址,一个是根目录/
,另一个是/date
。调用/
时,返回的是登录页面;调用/date
时,返回的是在shell
里执行date
的结果。
如果在登录页面不能登录,参考以下解决方法:
由此结合ironic
可以得到shellinabox
调用ipmitool
获取console
的大致命令:
1 | shellinaboxd -b -t -s /:LOGIN \ |
当访问http://localhost:4200/ipmitool/get_console
时即可获取到console
,其他的功能也可以通过编写新的service
添加到shellinabox
服务中。