发布
社区首页 >问答首页 >如何使用bash脚本更改iptable条目?

如何使用bash脚本更改iptable条目?
EN

Stack Overflow用户
提问于 2016-12-14 05:46:06
回答 1查看 1K关注 0票数 0

我有一个嵌入式Linux固件运行在家庭路由器上。当我一个接一个地从终端作为根运行以下命令时,它工作时没有任何错误,并且符合我的目的。我知道这不是一个安全的政策。这只是为了测试一些东西。

代码语言:javascript
代码运行次数:0
复制
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形式运行时,如下所示,

代码语言:javascript
代码运行次数:0
复制
#!/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

它给出了以下错误:

代码语言:javascript
代码运行次数:0
复制
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机器上工作得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-14 06:13:33

您是在Windows中创建脚本,还是以某种其他方式创建脚本,从而使其成为Windows行结束(CRLF),而路由器期望的是Unix行结束(LF)?

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

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

代码语言:javascript
代码运行次数:0
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41135654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档