如果成功登录到服务器,将发送通知到Hipchat

经过

由于工作中出现了使用HipChat的情景,所以我尝试着让服务器发送ssh登录通知到HipChat,以便进行通知和监控。

    • GitHubで公開しています。 –> ssh_watch

ブログで詰まったとことかまとめてます。–> 鋭意製作中

建立环境

安装node.js

目前(2014年8月),您可以使用epel存储库来使用yum进行安装。

    • epel repo -> v0.10.29

 

    公式の最新版(安定版) -> v0.10.30

因此可以充分地使用作为最新版本。
安装需要使用sudo或root权限进行(推荐使用sudo)。

$ sudo yum install nodejs npm --enablerepo=epel
$ sudo yum list installed | grep nodejs.x86_64
    • 参考URL

 

    node.jsをyumでインストールする(centos6.5)

使用这个命令后,就可以使用npm命令了。

使用npm安装hipchatter

npm是针对Node.js的包管理工具(类似于Ruby的Gem)。

$ sudo mkdir /etc/nodejs/
$ cd mkdir /etc/nodejs/
$ sudo npm init
$ sudo npm install hipchatter --save

Hipchatter的概述如下:
https://github.com/charltoons/hipchatter

创建一个执行的JSON文件

请参考上述的README.md文件来确定所需创建的JSON文件的格式,并按照其进行实际编写。

1. 获取可以查看自己HipChat账户的房间值

var Hipchatter = require('hipchatter');
var hipchatter = new Hipchatter('user_API');

// this will list all of your rooms
    hipchatter.rooms(function(err, rooms){
        if(!err) console.log(rooms)
    });

用户接口(API)是什么?

HipChat账户页面
-> 账户设置
-> 可通过API访问进行确认(生成)

    実行テスト
$ node 01_gets_rooms.js

获取特定房间的历史记录

var Hipchatter = require('hipchatter');
var hipchatter = new Hipchatter('user_API');

    hipchatter.history('room_id', function(err, history){
        // print the last message
        var length = history.items.length;
        history.items.forEach(function(item){
          console.log(item)
        });
    });

房间ID是

在刚才获取房间详细信息时,可以获取到作为ID的值。这是房间特有的值。

    実行テスト
$ node 02_history_log.js

将消息发送到特定的房间。

var Hipchatter = require('hipchatter');
var hipchatter = new Hipchatter('rooms_api');

    hipchatter.notify('room_id',
    {
        message: 'Hello iganari !!',
        color  : 'green', 
        token  : 'rooms_api',
        notify : true
    }, function(err){
        if (err == null) console.log('Successfully notified the room.');
    });

rooms_api是什么

与用户ID相同,房间也具有API。请注意,没有房间管理员权限无法创建和查看房间。

    実行テスト
$ node 03_send_msg.js

设置使上述文件在SSH登录时被执行。

sshrc的设置

首先,需要进行以下设置。
当用户通过ssh登录时,/etc/ssh/sshrc文件会被加载。

node /etc/nodejs/03_send_msg.js
ss.png

为了进行实际监视,需要不断添加设置。

创建专用的房间

房间名称 -> 服务器监控
令牌标签 -> 监控者
令牌(=房间消息API)
创建如上所述。需要管理员权限。
另外,请提前确认房间ID,可以通过上述命令等方式确认。

环境配置

$ sudo mkdir /etc/nodejs/ssh_watch

文件结构

├── 01_gets_rooms.js
├── 02_history_log.js
├── 03_send_msg.js
├── README.md
├── installation.sh
├── run
│   ├── get_hostname.sh
│   ├── modify_hostname.sh
│   └── send_msg-ssh_login.js
└── ssh
    └── sshrc

脚本内容

#!/bin/bash

HOSTNAME=`hostname`

sed -i "s/hostname/$HOSTNAME/g" /etc/nodejs/ssh_watch/send_msg-ssh_login.js
#!/bin/bash

HOSTNAME=`hostname`

sed -i "s/$HOSTNAME/hostname/g" /etc/nodejs/ssh_watch/send_msg-ssh_login.js
var Hipchatter = require('hipchatter');
var hipchatter = new Hipchatter('rooms_api');

    hipchatter.notify('room_id',
    {
        message: "hostnameに"+process.argv[3]+''+process.argv[2]+'としてログインしてきたよ!',
        color: 'green',
        token: 'rooms_api',
        notify: true
    }, function(err){
        if (err == null) console.log('Successfully notified the room.');
    });

sh /etc/nodejs/ssh_watch/get_hostname.sh
node /etc/nodejs/send_msg-ssh_login.js $USER $SSH_CLIENT
sh /etc/nodejs/ssh_watch/modify_hostname.sh

以下是sshd的环境变量:

変数名内容例$SSH_CLIENT接続元IPアドレス192.168.101.xxx$SSH_TTY接続元IPアドレス/dev/pts/1$USER接続元IPアドレスroot, dev

提前更改权限

Sed命令不会直接编辑目标文件,而是会创建临时文件进行重命名和删除操作。因此,需要具有该目录的写入权限。

$ sudo chmod 777 /etc/nodejs/ssh_watch

sshd的配置

创建以下的符号链接

ln -s /etc/nodejs/ssh_watch/ssh/sshrc /etc/ssh/sshrc 

执行结果

在完成上述设置后,对服务器进行SSH登录,并通知HipChat如下

ss.png

只要能安装nodejs,就能轻松完成安装!

请给出以下参考链接的中国原生语言翻译,只需要一种选项:

当通过SSH登录Linux机器时,通过Slack发送通知。
HipChatter是一个针对HipChat API的Node.js包装器。
附录A. 与OpenSSH相关的文件。

bannerAds