Mikrotik和Linux。 例行与自动化

我自我介绍,我叫安德烈。

最初的任务是-为Mikrotik创建数百个配置,在每个ovpn上引发一个证书,然后将配置上载到数百个Mikrotik配置,以及证书和密钥。

每个证书的密码是唯一的。 用手创建数百个配置是无济于事的,明天他们会告诉您进行新的配置,或者您想在Mikrotik上进行其他更改。

我想要实现的目标:

  1. 自动创建很多脚本;
  2. 自动将它们发送到我需要的设备上;
  3. 以确保他们能够正常工作,或者了解配置未正确执行。

图片

使用Bash和FTP,一切顺利。

一点理论
在RouterOS中,您可以自动执行脚本(您的脚本文件应类似于name.auto.rsc)。 通过FTP将文件上传到路由器后,将自动执行该文件,就像使用'/ import'命令一样(此方法仅适用于FTP)。
下载文件后,它将自动执行。 有关命令执行成功的信息记录在名称.auto.log中

AWK-类似C的脚本语言,用于根据指定的模式(正则表达式)逐行分析和处理输入流(例如,文本文件)。 可以在命令行脚本中使用。

Expect是Don Libes编写的Unix自动化和测试工具,是Tcl脚本语言的扩展,用于telnet,f​​tp,passwd,fsck,rlogin,tip,ssh等交互式应用程序。


首先,我制作了3个文件:

  1. 其中的List.txt文件记录了OVPN连接的名称(在我的情况下是商店的名称)和密钥的密码(由制表符分隔);
  2. sh1.sh-在list.txt +管道上使用逐行解析命令的bash文件;
  3. sh2.sh-一个bash文件,它使用Echo和变量创建一个配置文件并将其设置写入其中。

依此类推:

vi list.txt gamazin1 pass1 gamazin2 pass2 gamazin3 pass3 

 vi sh1.sh #!/bin/bash awk '{print "./sh2.sh "$1 " "$2}' ./list.txt | /bin/bash sudo chmod +x sh1.sh 

 vi sh2.sh #!/bin/bash echo /certificate > rsc/$1.auto.rsc echo import file-name=$1.crt passphrase=$2 >> rsc/$1.auto.rsc echo import file-name=$1.key passphrase=$2 >> rsc/$1.auto.rsc echo import file-name=ca.crt passphrase=$2 >> rsc/$1.auto.rsc echo /interface ovpn-client >> rsc/$1.auto.rsc echo add certificate=$1.crt_0 connect-to=10.10.10.10 name=$1_ovpn port=1111 user=$1 profile=default auth=sha1 cipher=blowfish128 >> rsc/$1.auto.rsc #      ehco. sudo ./sh1.sh 

一个警告!

$ 1.crt和$ 1.key使用相同的list.txt预先创建了它们,因此文件名也是商店的名称。

创建了一百个配置。 现在我们需要使用相同的AWK和Expect + FTP发送它们。

创建4个文件:

  1. List2.txt文件-在其中存储Mikrotik IP数据| 登录| 密码 商店的名称。 用制表符分隔。
  2. newsh1.sh-在bash2.txt +管道上使用逐行解析命令的bash文件
  3. newsh2.sh-使用Expect程序包通过FTP发送我们的愿望,该程序包响应控制台请求。
  4. $ 1.auto.rsc-在我的情况下是配置文件,它们是从变量$ 1创建的,该变量是上一个脚本中商店的名称。 范例gamazin1.auto.rsc。

 vi list2.txt 192.168.1.1 admin password1 gamazin1 192.168.2.1 admin password2 gamazin2 192.168.3.1 admin password3 gamazin3 #  1  list.txt        

 vi newsh1.sh #!/bin/bash awk '{print "./newsh2.sh "$1 " "$2 " "$3 " "$4}' ./list2.txt | /bin/bash sudo chmod +x newsh1.sh 

 Sudo apt-get install expect vi newsh2.sh #!/bin/bash Mikrotik=$(expect -c " set timeout 3 spawn ftp $1 expect \"Name*\" send \"$2\n\" expect \"?assword:\" send \"$3\n\" expect \"ftp>\" send \"put $4.crt\n\" expect \"ftp>\" send \"put $4.key\n\" expect \"ftp>\" send \"put ca.crt\n\" expect \"ftp>\" send \"put $4.auto.rsc\n\" expect \"ftp>\" send \"bye\n\" ") sudo ./newsh1.sh 

注意事项


首先,我们先发送带有密钥的证书,然后发送仅包含配置的证书(如果以相反的顺序发送,它将发誓没有这样的证书)。

像热蛋糕一样散布的配置和证书。 由于通过FTP命名为.auto.rsc,Mikrotik会自动将其驱入,并应用了我们的设置。

我们想知道到处都是超级,使用上面的配置我们更改了1行。

穿上
 send \"get $4.auto.log\n\" #  .log    .rsc 


我们将所有文件下载到首页并按文件排序,其中Mikrotik存在问题的文件大小为0字节。 通过文件名,您可以通过我们的文件list2.txt查找其IP。 在一个好的版本中,打开文件,您会看到“脚本文件已成功加载并成功执行”。

您也可以为这些文件编写脚本,但是我只需要按权重对文件进行排序。

我还编写了另一个脚本,所有关闭FTP的操作(反之亦然)之后,通过SSH打开。 刚将FTP更改为SSH以...

我们玩FTP
 /ip service set ftp disabled=yes #  SSH    #      /file remove $4.auto.rsc 


我尝试将所有内容一次推送到1个配置中,但是在命令末尾删除文件并没有得到结果;它无法删除接收此命令的文件。 仍然有细微差别。

最后...幸福! 您可以根据需要管理单个Mikrotik列表或一次管理所有列表。 现在,通过打开FTP并关闭,您可以发送命令并确保它们已完成。 但是我认为比FTP更方便, SSH并没有中途失败 ,因为您可以通过在logs文件夹中确保一切正常。

在本文中,我展示了这些工具,但是您可以考虑如何自己使用它们...
我在Ubuntu 16.04上进行了所有操作。

关于Mikrotik的auto.rsc
Awk
期待

Source: https://habr.com/ru/post/zh-CN480404/


All Articles