v1.2优化服务器配置

增加登录账户设置
增加密码登录验证
This commit is contained in:
郝大全
2017-08-17 13:07:23 +08:00
parent 3c87908dde
commit 441aecdb16
7 changed files with 127 additions and 20 deletions

View File

@@ -28,6 +28,6 @@ v1.1
----
v1.2
1、新增服务器资源添加 新增数据表pp_task_server
2、新增远程服务器任务执行
2、新增远程服务器任务执行(密码验证和密钥验证登录)
3、删除邮件通知功能pp_task删除两个有关字段

View File

@@ -53,6 +53,7 @@ func (this *ServerController) Add() {
if this.isPost() {
server := new(models.TaskServer)
server.ServerName = strings.TrimSpace(this.GetString("server_name"))
server.ServerAccount = strings.TrimSpace(this.GetString("server_account"))
server.ServerIp = strings.TrimSpace(this.GetString("server_ip"))
server.Port,_= strconv.Atoi(this.GetString("port"))
server.Type,_ = strconv.Atoi(this.GetString("type"))
@@ -82,6 +83,7 @@ func (this *ServerController) Edit() {
if this.isPost() {
server.ServerName = strings.TrimSpace(this.GetString("server_name"))
server.ServerAccount = strings.TrimSpace(this.GetString("server_account"))
server.ServerIp = strings.TrimSpace(this.GetString("server_ip"))
server.Port,_ = strconv.Atoi(this.GetString("port"))
server.Type,_ = strconv.Atoi(this.GetString("type"))

View File

@@ -43,13 +43,22 @@ func NewJobFromTask(task *models.Task) (*Job, error) {
job.task = task
job.Concurrent = task.Concurrent == 1
return job, nil
}else{
server, _ := models.TaskServerGetById(task.ServerId)
job := RemoteCommandJob(task.Id, task.TaskName, task.Command,server)
}
server, _ := models.TaskServerGetById(task.ServerId)
if(server.Type==0){
//密码验证登录服务器
job := RemoteCommandJobByPassword(task.Id, task.TaskName, task.Command,server)
job.task = task
job.Concurrent = task.Concurrent == 1
return job, nil
}
job := RemoteCommandJob(task.Id, task.TaskName, task.Command,server)
job.task = task
job.Concurrent = task.Concurrent == 1
return job, nil
}
func NewCommandJob(id int, name string, command string) *Job {
@@ -71,7 +80,7 @@ func NewCommandJob(id int, name string, command string) *Job {
}
return job
}
//远程执行任务
//远程执行任务 密钥验证
func RemoteCommandJob(id int,name string,command string,servers *models.TaskServer) *Job {
job := &Job{
id: id,
@@ -90,7 +99,7 @@ func RemoteCommandJob(id int,name string,command string,servers *models.TaskServ
}
addr := fmt.Sprintf("%s:%d", servers.ServerIp, servers.Port)
config := &ssh.ClientConfig{
User: "root",
User: servers.ServerAccount,
Auth: []ssh.AuthMethod{
// Use the PublicKeys method for remote authentication.
ssh.PublicKeys(signer),
@@ -130,6 +139,62 @@ func RemoteCommandJob(id int,name string,command string,servers *models.TaskServ
return job
}
func RemoteCommandJobByPassword(id int,name string,command string,servers *models.TaskServer) *Job{
var (
auth []ssh.AuthMethod
addr string
clientConfig *ssh.ClientConfig
client *ssh.Client
session *ssh.Session
err error
)
job := &Job{
id: id,
name: name,
}
job.runFunc = func(timeout time.Duration) (string, string, error, bool) {
// get auth method
auth = make([]ssh.AuthMethod, 0)
auth = append(auth, ssh.Password(servers.Password))
clientConfig = &ssh.ClientConfig{
User: servers.ServerAccount,
Auth: auth,
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
//Timeout: 1000 * time.Second,
}
// connet to ssh
addr = fmt.Sprintf("%s:%d", servers.ServerIp, servers.Port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
return "", "", err, false
}
// create session
if session, err = client.NewSession(); err != nil {
return "", "", err, false
}
var b bytes.Buffer
var c bytes.Buffer
session.Stdout = &b
session.Stderr = &c
//session.Output(command)
if err := session.Run(command); err != nil {
return "","",err,false
}
isTimeout := false
return b.String(), c.String(), err, isTimeout
}
return job
}
func (j *Job) Status() int {

View File

@@ -15,6 +15,7 @@ import (
type TaskServer struct {
Id int
ServerName string
ServerAccount string
ServerIp string
Port int
Password string
@@ -39,6 +40,10 @@ func (t *TaskServer) Update(fields ...string) error {
return fmt.Errorf("服务器IP不能为空")
}
if t.ServerAccount == "" {
return fmt.Errorf("登录账户不能为空")
}
if t.Type == 0 && t.Password == "" {
return fmt.Errorf("服务器密码不能为空")
}
@@ -55,7 +60,22 @@ func (t *TaskServer) Update(fields ...string) error {
func TaskServerAdd(obj *TaskServer) (int64, error) {
if obj.ServerName == "" {
return 0, fmt.Errorf("服务器名不能为空")
return 0,fmt.Errorf("服务器名不能为空")
}
if obj.ServerIp == "" {
return 0,fmt.Errorf("服务器IP不能为空")
}
if obj.ServerAccount == "" {
return 0,fmt.Errorf("登录账户不能为空")
}
if obj.Type == 0 && obj.Password == "" {
return 0,fmt.Errorf("服务器密码不能为空")
}
if obj.Type == 1 && obj.PrivateKeySrc == "" {
return 0,fmt.Errorf("私钥不能为空")
}
return orm.NewOrm().Insert(obj)
}

View File

@@ -9,7 +9,7 @@
Target Server Version : 50712
File Encoding : utf-8
Date: 08/17/2017 11:29:01 AM
Date: 08/17/2017 13:03:22 PM
*/
SET NAMES utf8;
@@ -62,13 +62,13 @@ CREATE TABLE `pp_task` (
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `pp_task`
-- ----------------------------
BEGIN;
INSERT INTO `pp_task` VALUES ('1', '1', '0', '2', '测试任务名称', '0', '测试任务说明', '0 0/1 11 * *', '0', 'echo \"hello\\n\" >> /tmp/test_cron1.log', '0', '0', '46', '1498187640', '1497855526'), ('2', '1', '1', '2', '外部服务器', '0', '一分钟一次', '0 */1 * * * *', '0', '/webroot/server/php/bin/php /webroot/www/default/test.php', '0', '0', '83', '1502940180', '1502876155'), ('3', '1', '1', '1', '重要测试任务222', '0', '1分钟执行一次', '0 */1 * * *', '0', '/webroot/server/php/bin/php /webroot/www/default/test2.php', '0', '0', '22', '1502940060', '1502936077');
INSERT INTO `pp_task` VALUES ('1', '1', '0', '2', '测试任务名称', '0', '测试任务说明', '0 0/1 11 * *', '0', 'echo \"hello\\n\" >> /tmp/test_cron1.log', '0', '0', '47', '1502941758', '1497855526'), ('2', '1', '1', '2', '外部服务器', '0', '一分钟一次', '0 */1 * * * *', '0', '/webroot/server/php/bin/php /webroot/www/default/test.php', '0', '0', '83', '1502940180', '1502876155'), ('3', '1', '1', '1', '重要测试任务222', '0', '2s执行一次', '*/2 * * * *', '0', '/webroot/server/php/bin/php /webroot/www/default/test2.php', '0', '0', '24', '1502941383', '1502936077'), ('9', '1', '4', '2', '密码验证任务', '0', '5秒执行一次', '*/5 * * * *', '0', '/webroot/server/php/bin/php /webroot/www/default/test2.php', '0', '0', '1', '1502946004', '1502945973');
COMMIT;
-- ----------------------------
@@ -106,13 +106,13 @@ CREATE TABLE `pp_task_log` (
`create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_task_id` (`task_id`,`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `pp_task_log`
-- ----------------------------
BEGIN;
INSERT INTO `pp_task_log` VALUES ('1', '7', '等待10秒\nphp执行完毕', '', '0', '20484', '1502940420'), ('2', '7', '等待10秒\nphp执行完毕', '', '0', '20367', '1502940480');
INSERT INTO `pp_task_log` VALUES ('1', '7', '等待10秒\nphp执行完毕', '', '0', '20484', '1502940420'), ('2', '7', '等待10秒\nphp执行完毕', '', '0', '20367', '1502940480'), ('3', '8', '等待11秒\nphp执行完毕', '', '0', '121487', '1502940420'), ('4', '7', '等待10秒\nphp执行完毕', '', '0', '20317', '1502940540'), ('5', '7', '等待10秒\nphp执行完毕', '', '0', '20629', '1502940600'), ('6', '7', '等待10秒\nphp执行完毕', '', '0', '20387', '1502940660'), ('7', '8', '等待11秒\nphp执行完毕', '', '0', '121626', '1502940600'), ('8', '7', '等待10秒\nphp执行完毕', '', '0', '20486', '1502940720'), ('9', '7', '等待10秒\nphp执行完毕', '', '0', '20416', '1502940780'), ('10', '7', '等待10秒\nphp执行完毕', '', '0', '20378', '1502940840'), ('11', '8', '等待11秒\nphp执行完毕', '', '0', '121432', '1502940780'), ('12', '7', '等待10秒\nphp执行完毕', '', '0', '21313', '1502940900'), ('13', '7', '等待10秒\nphp执行完毕', '', '0', '20420', '1502940960'), ('14', '7', '等待10秒\nphp执行完毕', '', '0', '21271', '1502941020'), ('15', '8', '等待11秒\nphp执行完毕', '', '0', '121418', '1502940960'), ('16', '7', '等待10秒\nphp执行完毕', '', '0', '20355', '1502941080'), ('17', '3', '等待11秒\nphp执行完毕', '', '0', '121437', '1502941260'), ('18', '3', '等待11秒\nphp执行完毕', '', '0', '121343', '1502941383'), ('19', '1', '', '', '0', '56', '1502941758'), ('20', '9', '等待11秒\nphp执行完毕', '', '0', '121481', '1502946004');
COMMIT;
-- ----------------------------
@@ -122,6 +122,7 @@ DROP TABLE IF EXISTS `pp_task_server`;
CREATE TABLE `pp_task_server` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`server_name` varchar(64) NOT NULL DEFAULT '0' COMMENT '服务器名称',
`server_account` varchar(32) NOT NULL DEFAULT 'root' COMMENT '账户名称',
`server_ip` varchar(20) NOT NULL DEFAULT '0' COMMENT '服务器IP',
`port` int(4) unsigned NOT NULL DEFAULT '22' COMMENT '服务器端口',
`password` varchar(64) NOT NULL DEFAULT '0' COMMENT '服务器密码',
@@ -133,13 +134,13 @@ CREATE TABLE `pp_task_server` (
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态0-正常1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='服务器列表';
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='服务器列表';
-- ----------------------------
-- Records of `pp_task_server`
-- ----------------------------
BEGIN;
INSERT INTO `pp_task_server` VALUES ('1', '远程服务器-php', '172.16.210.157', '22', '', '/Users/haodaquan/.ssh/pp_rsa', '/Users/haodaquan/.ssh/pp_rsa.pub', '1', '远程服务器示例', '1502862723', '1502939962', '0');
INSERT INTO `pp_task_server` VALUES ('1', '密钥验证登录服务器', 'root', '172.16.210.157', '22', '', '/Users/haodaquan/.ssh/pp_rsa', '/Users/haodaquan/.ssh/pp_rsa.pub', '1', '远程服务器示例', '1502862723', '1502945893', '0'), ('4', '密码验证服务器', 'root', '172.16.210.157', '22', 'root', '', '', '0', '这是密码验证服务器', '1502945869', '1502945869', '0');
COMMIT;
-- ----------------------------

View File

@@ -30,6 +30,15 @@
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="server_account">登录账户</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="root" name="server_account" value="" required />
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="server_ip">服务器IP</label>
<div class="col-sm-3" >
@@ -43,7 +52,7 @@
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="port">服务器ssh端口</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="port" value="" required />
<input type="text" class="form-control input-sm" placeholder="22" name="port" value="" required />
</div>
<div class="col-sm-6" style="padding-top:5px;">
@@ -70,7 +79,7 @@
<div class="form-group hide" style="margin-top: 15px" id="password">
<label class="col-sm-3 control-label" for="password">服务器密码</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="password" value="" readonly />
<input type="text" class="form-control input-sm" placeholder="" name="password" value="" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
@@ -80,7 +89,7 @@
<div class="form-group " style="margin-top: 15px" id="private_key_src">
<label class="col-sm-3 control-label" for="private_key_src">私钥地址</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="private_key_src" value="/Users/haodaquan/.ssh/pp_rsa" />
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa" name="private_key_src" value="" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
@@ -89,7 +98,7 @@
<div class="form-group " style="margin-top: 15px" id="public_key_src">
<label class="col-sm-3 control-label" for="public_key_src">公钥地址</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="public_key_src" value="/Users/haodaquan/.ssh/pp_rsa.pub" />
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa.pub" name="public_key_src" value="" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
<i style="font-size: 12px">公钥和私钥地址请在本地服务器生成,命令ssh-keygen -t rsa -f pp_rsa</i>

View File

@@ -30,6 +30,16 @@
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="server_name">登录账户</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="root" name="server_account" value="{{.server.ServerAccount}}" required />
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="server_ip">服务器IP</label>
<div class="col-sm-3" >
@@ -70,7 +80,7 @@
<div class="form-group {{if eq .server.Type 1}}hide{{end}}" style="margin-top: 15px" id="password">
<label class="col-sm-3 control-label" for="password">服务器密码</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="password" value="{{.server.Password}}" />
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa" name="password" value="{{.server.Password}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
@@ -80,7 +90,7 @@
<div class="form-group {{if eq .server.Type 0}}hide{{end}}" style="margin-top: 15px" id="private_key_src">
<label class="col-sm-3 control-label" for="private_key_src">私钥地址</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="private_key_src" value="{{.server.PrivateKeySrc}}" />
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa.pub" name="private_key_src" value="{{.server.PrivateKeySrc}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">