如果成功登录到服务器,将发送通知到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

为了进行实际监视,需要不断添加设置。
创建专用的房间
房间名称 -> 服务器监控
令牌标签 -> 监控者
令牌(=房间消息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的环境变量:
提前更改权限
Sed命令不会直接编辑目标文件,而是会创建临时文件进行重命名和删除操作。因此,需要具有该目录的写入权限。
$ sudo chmod 777 /etc/nodejs/ssh_watch
sshd的配置
创建以下的符号链接
ln -s /etc/nodejs/ssh_watch/ssh/sshrc /etc/ssh/sshrc
执行结果
在完成上述设置后,对服务器进行SSH登录,并通知HipChat如下

只要能安装nodejs,就能轻松完成安装!
请给出以下参考链接的中国原生语言翻译,只需要一种选项:
当通过SSH登录Linux机器时,通过Slack发送通知。
HipChatter是一个针对HipChat API的Node.js包装器。
附录A. 与OpenSSH相关的文件。