0

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がやろうとしていることです。

このコマンドがCapistranoをロックするのはなぜですか?

解決策または手がかりのためのTIA。

すべて楽しんでください!!!

4

1 に答える 1

0

先日、これを自分で考え出しました。問題は、タスクのパラメーターとして「port」という名前を使用していたことでした。'parameter'ポートは'run'コマンドによって認識され、システムは通常のsshポートではなくそのポートを介してターゲットマシンに接続しようとします。したがって、ロックアップ。

パラメータ名を「dport」に変更すると、タスクが期待どおりに機能し始めました。

于 2010-09-04T23:07:21.650 に答える