From 1e573f0c3e54cdbbb6c359935ede6d8c3904ebfe Mon Sep 17 00:00:00 2001 From: "rnd@rajven.ru" Date: Fri, 3 Jul 2026 13:16:28 +0300 Subject: [PATCH] Added the ability to explicitly specify the port on which the telnet or ssh service is running for each host, i.e. in config: source: default: csv csv: file: "/home/oxidized/.config/oxidized/router.db" delimiter: !ruby/regexp /\:/ map: name: 0 ip: 1 username: 2 password: 3 model: 4 added: input_port: 5 input: 6 group: 7 vars_map: enable: 8 comware_cmdline: 9 in router.db: router:192.168.1.1:admin:password:routeros:60022:ssh:Gateways:: --- lib/oxidized/input/sshbase.rb | 3 ++- lib/oxidized/input/telnet.rb | 2 +- lib/oxidized/node.rb | 7 ++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/oxidized/input/sshbase.rb b/lib/oxidized/input/sshbase.rb index 2a26aba61..c9bcdb19f 100644 --- a/lib/oxidized/input/sshbase.rb +++ b/lib/oxidized/input/sshbase.rb @@ -28,6 +28,7 @@ def connected? end def make_ssh_opts + node_ssh_port = @node.input_port || vars(:ssh_port) ssh_opts = { number_of_password_prompts: 0, keepalive: vars(:ssh_no_keepalive) ? false : true, @@ -35,7 +36,7 @@ def make_ssh_opts append_all_supported_algorithms: true, password: @node.auth[:password], timeout: @node.timeout, - port: (vars(:ssh_port) || 22).to_i, + port: (node_ssh_port || 22).to_i, forward_agent: false } diff --git a/lib/oxidized/input/telnet.rb b/lib/oxidized/input/telnet.rb index 02fa6c96d..634ff891f 100644 --- a/lib/oxidized/input/telnet.rb +++ b/lib/oxidized/input/telnet.rb @@ -12,7 +12,7 @@ def connect(node) # rubocop:disable Naming/PredicateMethod @text_debug = DebugText.new(Oxidized.config.input.debug, @node, config_name) - port = vars(:telnet_port) || 23 + port = @node.input_port || vars(:telnet_port) || 23 telnet_opts = { 'Host' => @node.ip, diff --git a/lib/oxidized/node.rb b/lib/oxidized/node.rb index a3e5c10c0..da6d4bd11 100644 --- a/lib/oxidized/node.rb +++ b/lib/oxidized/node.rb @@ -7,7 +7,7 @@ class ModelNotFound < OxidizedError; end class Node include SemanticLogger::Loggable - attr_reader :name, :ip, :model, :input, :output, :group, :auth, :prompt, :timeout, :vars, :last, :repo + attr_reader :name, :ip, :model, :input, :output, :group, :auth, :prompt, :timeout, :vars, :last, :repo, :input_port attr_accessor :running, :user, :email, :msg, :from, :stats, :retry, :err_type, :err_reason, :nexted alias running? running alias nexted? nexted @@ -25,6 +25,7 @@ def initialize(opt) @group = opt[:group] @model = resolve_model opt @input = resolve_input opt + @input_port = resolve_input_port opt @output = resolve_output opt @auth = resolve_auth opt @prompt = resolve_prompt opt @@ -183,6 +184,10 @@ def resolve_input(opt) end end + def resolve_input_port(opt) + resolve_key :input_port, opt + end + def resolve_output(opt) output = resolve_key :output, opt, Oxidized.config.output.default unless Oxidized.mgr.output[output]