繁体   English   中英

mikrotik 通过 bash 命令

[英]mikrotik command over bash

我想通过 bash 脚本阻止一些网站。 我有一个网站名称列表 list.txt。 路由器是 mikrotik。 我需要语法方面的帮助。 ssh连接后我无法发送命令

文件=“列表.txt”

行 = cat $ file

sshpass -p 'blabla' ssh y@xxxx

对于 $ 行中的行;

"/ip proxy acces add dst-host="$line"action=deny comment="list"

完成

这是一个很老的问题,但如果有人遇到同样的问题,我会给出我的答案;)

#!/bin/bash

where="<path to your mikrotik config.txt>";
len=`cat $where | wc -l`;
config=`for (( c=1; c<=$len; c++ )) do line=\`sed -n "$c""p" $where\`; echo  $line; done`;

sshpass -p "blabla" ssh -t -oStrictHostKeyChecking=no y@x.x.x.x $config

Mikrotik 也支持 ssh-key ! 使用密钥而不是 sshpass 更安全。

您在本地机器中声明 $file 和 $lines,您连接的路由器无法遍历此值。

尝试这样的事情:

while read l;do
sshpass -p 'blabla' ssh y@x.x.x.x ip proxy access add dst-host ="$l" action = deny comment ='list'
done < list.txt

除了使用sshpass ,您还可以添加您的公钥:

 ssh 192.168.88.1 "/file print file=key; file set key contents=\"`cat ~/.ssh/id_rsa.pub`\";/user ssh-keys import public-key-file=key.txt;/ip ssh set always-allow-password-login=yes"

然后你就可以 ssh 而不必使用 sshpass。 如果您主要使用 ssh,那么您可以通过在您的 mikrotik 主机的/etc/ssh/ssh_config中将您的用户username+ct更改为username+ct来禁用着色,或者只是ssh username+ct@router

@DamianK 的回答变成:

where="<path to your mikrotik config.txt>";
len=`cat $where | wc -l`;
config=`for (( c=1; c<=$len; c++ )) do line=\`sed -n "$c""p" $where\`; echo  $line; done`;

ssh x.x.x.x $config

您可以做的另一件漂亮的事情是告诉 ssh 将连接保持打开状态,例如600秒 - 然后您不会得到多次运行ssh的登录延迟,因此您可以使用 @esstorm 的答案。 把它放在你的/etc/ssh/ssh_config

 ControlMaster auto
 ControlPath ~/.ssh/socket-%r@%h-%p
 ControlPersist 600

唯一的障碍是,如果连接超时,如果您在该超时内重新连接,连接将挂起。 您当然可以手动删除套接字,您可以通过find .ssh/sock*

@esstorm 的回答变成了:

while read l;do
ssh y@x.x.x.x ip proxy access add dst-host ="$l" action = deny comment ='list'
done < list.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM