v1.2优化服务器配置
增加登录账户设置 增加密码登录验证
This commit is contained in:
@@ -28,6 +28,6 @@ v1.1
|
||||
----
|
||||
v1.2
|
||||
1、新增服务器资源添加 (新增数据表pp_task_server)
|
||||
2、新增远程服务器任务执行
|
||||
2、新增远程服务器任务执行(密码验证和密钥验证登录)
|
||||
3、删除邮件通知功能(pp_task删除两个有关字段)
|
||||
|
||||
|
||||
@@ -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"))
|
||||
|
||||
75
jobs/job.go
75
jobs/job.go
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
15
ppgo_job.sql
15
ppgo_job.sql
@@ -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;
|
||||
|
||||
-- ----------------------------
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;">
|
||||
|
||||
|
||||
Reference in New Issue
Block a user