[英]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.