2016-12-14 78 views
0

我有在家庭路由器上运行的嵌入式Linux固件。当我以root身份从终端一个接一个地运行以下命令时,它的工作原理没有任何错误,并符合我的目的。我知道这不是一个安全的政策。这只是为了测试一些东西。如何使用bash脚本更改iptable条目?

iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -P OUTPUT ACCEPT 
iptables -F 
iptables -X 
iptables -A INPUT -p tcp -i eth1 --dport 4444 -j ACCEPT 

但是,如果这是在bash脚本如下root身份运行,

#!/bin/bash 
iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -P OUTPUT ACCEPT 
iptables -F 
iptables -X 
iptables -A INPUT -p tcp -i eth1 --dport 4444 -j ACCEPT 

它提供了以下错误:

iptables: Bad policy name. Run `dmesg' for more information. 
iptables: Bad policy name. Run `dmesg' for more information. 
iptables: Bad policy name. Run `dmesg' for more information. 
iptables: No chain/target/match by that name. 
iptables: No chain/target/match by that name. 

我已确认的最后一行bash脚本执行没有错误,并且条目可以在iptables中看到。但是,所有其他行都会引发错误。我究竟做错了什么?令人惊讶的是,同样的批处理脚本在我的Ubuntu机器上工作正常。

+0

您是如何以root特权运行shell脚本的?你能让我们知道你是如何引用它的吗? – Inian

+0

该路由器附带默认凭证默认运行的telnet服务。 –

回答

2

您是在Windows中创建脚本还是以某种其他方式为Windows线路结尾(CRLF)设置路由器期望的Unix线路结尾(LF)?

这将导致解释器在每个命令的末尾读取额外的不可打印字符,这会导致显示的错误。

您可以通过运行cat -v myScript.sh进行检查。不正确的Windows行结尾将显示为:

iptables -P INPUT ACCEPT^M 
iptables -P FORWARD ACCEPT^M 
iptables -P OUTPUT ACCEPT^M 
iptables -F^M 
iptables -X^M 
iptables -A INPUT -p tcp -i eth1 --dport 4444 -j ACCEPT 
+0

非常感谢你!这正是问题所在! –