我正在尝试使用Capistrano远程打开iptables防火墙中的端口。这是我的任务:
desc "Open up a port in the firewall"
task :open_port, :roles => :all do
port = variables[:port] || nil
if (!port)
puts "You must specify the port number"
next
end
run "#{sudo} /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport #{port.to_s} -j ACCEPT"
run "#{sudo} /sbin/service iptables save"
run "#{sudo} /etc/init.d/iptables restart"
end
问题是任务中的第一个命令会锁定。我尝试使用各种端口号和目标机器来运行此规则,但结果总是相同。
我确实有许多其他规则,看起来很像这样,但工作正常。事实上,我有一个类似的任务,第一个命令是调用iptables创建端口映射,该任务工作得很好。
更重要的是,我可以在Capistrano主机上成功运行此命令:
ssh -l deployer core sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport 2424 -j ACCEPT
这很好用。这应该是卡皮斯特拉诺试图做的事情。
为什么这个命令会锁定Capistrano?
TIA提供解决方案或任何线索。
玩得开心!!!
答案 0 :(得分:0)
前几天我自己想出了这个。问题是我使用名称'port'作为我的任务的参数。 '参数'端口由'run'命令识别,并导致系统尝试通过该端口而不是正常的ssh端口连接到目标机器。因此锁定。
我将参数名称更改为“dport”,任务开始按预期工作。