Gateoneファースト--djangoバーガーの実現
配置
まず、Gateoneの配置が必要です.gateoneはtonadoで書いてあるので、直接にdockerを使って起動してから簡単に配置すればいいです.ソースパッケージをダウンロードするか、またはrpmパッケージをインストールするか、ここでは詳細なインストールプロセスを説明しません.具体的にはgithubの内容が見られます.または公式文書を参照してください.http://liftoff.github.io/GateOne/About/installation.html
dockerを使う方法を勧めます.https://github.com/liftoff/GateOne/tree/master/docker テスト環境でdockerfileを作成した後、dockerを起動し、オープンポートと持続的なストレージのディレクトリに注意します.
私が使っているのはソースパッケージのインストール方式です.公式文書に基づいて彼のソースコードを調べます.
基本設定
私はバリアマシンと結合したいので、ここの認証方式はアプリを使う必要があります.まずコードディレクトリに入ります.
バーガーマシンを作るプロジェクトでは、djangoを使っていますので、djangoを例にしています.
もちろんページでも放送できます.ページの右側のterminal appration panelで開いたらロゴが見えます.
まず、Gateoneの配置が必要です.gateoneはtonadoで書いてあるので、直接にdockerを使って起動してから簡単に配置すればいいです.ソースパッケージをダウンロードするか、またはrpmパッケージをインストールするか、ここでは詳細なインストールプロセスを説明しません.具体的にはgithubの内容が見られます.または公式文書を参照してください.http://liftoff.github.io/GateOne/About/installation.html
dockerを使う方法を勧めます.https://github.com/liftoff/GateOne/tree/master/docker テスト環境でdockerfileを作成した後、dockerを起動し、オープンポートと持続的なストレージのディレクトリに注意します.
私が使っているのはソースパッケージのインストール方式です.公式文書に基づいて彼のソースコードを調べます.
基本設定
私はバリアマシンと結合したいので、ここの認証方式はアプリを使う必要があります.まずコードディレクトリに入ります.
cd gateone
python run_gateone.py --new_api_key
# api key
cd conf.d
vim 10server.conf
# gateone web
"origins": ["localhost:10443", "127.0.0.1:10443","127.0.0.1:8088","172.16.13.80:8088"],
# origins ,
vim 20authentication.conf
"auth":"api",
cat 30api_keys.conf
// This file contains the key and secret pairs used by Gate One's API authentication method.
{
"*": {
"gateone": {
"api_keys": {
"ODdiN2QwZjI3OGUwNGQ4Njg2M2I5MTY3NTM1NTVjMWQyZ": "MTY5ZWVjYmU0YmFiNGYzNDliYjQxYWY2YTg2MjllNDc0N"
}
}
}
}
# key1:secret1,key2:secret2,
# key, secret
基本webアプリケーションの埋め込みバーガーマシンを作るプロジェクトでは、djangoを使っていますので、djangoを例にしています.
// host_list.html
<a href="{% url 'host_connect' %}?host={{ post.host_ip }}&&user={{ post.host_user }}&&port={{ post.host_port }}" target="_blank" class="btn btn-xs btn-info"> a>
// html , 。 。
# view.py
def host_connect(request):
host_ip = request.GET.get('host',None)
host_user = request.GET.get('user','root')
host_port = request.GET.get('port',22)
if host_port =="":host_port=22
print host_port
if not host_ip :
return my_render('404.html',locals(),request)
else:
return my_render('gateone.html',locals(),request)
# get , gateone
<script type="text/javascript" src="/static/js/gateone/gateone.js">script>
<div id="gateone_container" style="position: relative; width: 100%; height: 50em;margin: 0 auto">
<div id="gateone">div>
div>
<script type="application/javascript" src="/static/js/jquery-2.1.1.js">script>
<script type="text/javascript">
$(document).ready(function(){
var ip = '{{ host_ip }}';
var user = '{{ host_user }}';
var port = {{ host_port }};
var ssh_url = 'ssh://'+user+'@'+ip+':'+port;
var request = $.ajax({
url:'{% url "get_auth_obj" %}', // api ,
type:"GET",
dataType:"json"
});
request.done(function(auth_info){
console.log(auth_info.auth);
var auth_message = auth_info.auth;
var auth_url = auth_info.url;
GateOne.init({
auth: auth_message,
url:auth_url,
theme:'solarized',
goDiv:'#gateone',
disableTermTransitions:'true',
autoConnectURL:ssh_url
});
});
GateOne.Base.superSandbox("GateOne.SomePlugin", ["GateOne", "GateOne.Net", "GateOne.Terminal.Input", "GateOne.Terminal"], function(window, undefined) {
var location = ip;
GateOne.prefs.autoConnectURL=ssh_url;
GateOne.prefs.fontSize="100%";
GateOne.prefs.scrollback = 10000; // scrollback buffer up to 10,000 lines
GateOne.Terminal.loadFont("Source Code Pro", "150%");
{# GateOne.locations; // Holds the state of all current known/open locations#}
GateOne.Net.setLocation(location);
});
});
script>
# views.py get_auth_obj
# 。
def create_signature(secret, *parts):
import hmac, hashlib
hash = hmac.new(secret, digestmod=hashlib.sha1)
for part in parts:
hash.update(str(part))
return hash.hexdigest()
def get_auth_obj(request):
import time, hmac, hashlib, json
user = request.user.username
# gateone .
gateone_server = 'https://172.16.13.80:10443'
# api_key secret
secret = "MTY5ZWVjYmU0YmFiNGYzNDliYjQxYWY2YTg2MjllNDc0N"
api_key = "ODdiN2QwZjI3OGUwNGQ4Njg2M2I5MTY3NTM1NTVjMWQyZ"
authobj = {
'api_key': api_key,
'upn': "gateone",
'timestamp': str(int(time.time() * 1000)),
'signature_method': 'HMAC-SHA1',
'api_version': '1.0'
}
my_hash = hmac.new(secret, digestmod=hashlib.sha1)
my_hash.update(authobj['api_key'] + authobj['upn'] + authobj['timestamp'])
authobj['signature'] = my_hash.hexdigest()
auth_info_and_server = {"url": gateone_server, "auth": authobj}
valid_json_auth_info = json.dumps(auth_info_and_server)
# print valid_json_auth_info
return HttpResponse(valid_json_auth_info)
以上はgateoneの簡単な使用で、クリック・ジャンプ接続だけを実現しましたが、やはりマニュアルでパスワードを入力しなければなりません.gateoneは操作記録を実現できます.記録されたフォーマットはgologです.標準位置はgateone/gateone/logs gateone/appliation/terminal/logview.py XXX.gologlogsで端末で操作記録を再生できます.もちろんページでも放送できます.ページの右側のterminal appration panelで開いたらロゴが見えます.