module DTK::Client::SSHUtil

Public Class Methods

default_rsa_pub_key_path() click to toggle source
# File lib/client/util/ssh_util.rb, line 41
def self.default_rsa_pub_key_path
  "#{ssh_base_dir}/id_rsa.pub"
end
read_and_validate_pub_key(path_to_pub_key) click to toggle source
# File lib/client/util/ssh_util.rb, line 20
def self.read_and_validate_pub_key(path_to_pub_key)
  is_ssh_key_path_valid?(path_to_pub_key)
  rsa_pub_key = File.open(path_to_pub_key) { |f| f.read }
  is_ssh_key_content_valid?(rsa_pub_key)
  rsa_pub_key
end
rsa_pub_key_content() click to toggle source
# File lib/client/util/ssh_util.rb, line 45
def self.rsa_pub_key_content
  path_to_key = self.default_rsa_pub_key_path
  unless File.file?(path_to_key)
    raise Error,"No File found at (#{path_to_key}). Path is wrong or it is necessary to generate the public rsa key (e.g., run ssh-keygen -t rsa)"
  end
  
  content = File.open(path_to_key){ |f| f.read }
  content.chomp
end
ssh_reachable?(user, server, timeout = 3) click to toggle source
# File lib/client/util/ssh_util.rb, line 55
def self.ssh_reachable?(user, server, timeout = 3)
  output = `ssh -o ConnectTimeout=#{timeout} -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" -q #{user}@#{server} exit; echo $?`
  
  # if response 0 than it is able to connect
  "0".eql?(output.strip)
end
update_ssh_known_hosts(server_dns,server_fingerprint) click to toggle source
# File lib/client/util/ssh_util.rb, line 27
def self.update_ssh_known_hosts(server_dns,server_fingerprint)
  known_hosts_path = ssh_known_hosts_path
  if File.file?(known_hosts_path)
    `ssh-keygen -f #{known_hosts_path} -R #{server_dns} 2> /dev/null`
    File.open(known_hosts_path,"a"){|f|f << server_fingerprint}
  else
    ssh_base_dir = ssh_base_dir()
    unless File.directory?(ssh_base_dir)
        Dir.mkdir(ssh_base_dir)
    end
    File.open(known_hosts_path,"w"){|f|f << server_fingerprint}
  end
end

Private Class Methods

is_ssh_key_content_valid?(rsa_pub_key) click to toggle source
# File lib/client/util/ssh_util.rb, line 82
def self.is_ssh_key_content_valid?(rsa_pub_key)
  # checking know ssh rsa pub key content
  if(rsa_pub_key.empty? || !rsa_pub_key.include?("AAAAB3NzaC1yc2EA"))
    raise Error, "[ERROR] SSH public key (#{path_to_key}) does not have valid content. Please check your key and try again."
  end
end
is_ssh_key_path_valid?(path_to_key) click to toggle source
# File lib/client/util/ssh_util.rb, line 72
def self.is_ssh_key_path_valid?(path_to_key)
  unless path_to_key.include?(".pub")
    raise Error, "[ERROR] Invalid public key file path (#{path_to_key}). Please provide valid path and try again."
  end
  
  unless File.exists?(path_to_key)
    raise Error, "[ERROR] Not able to find provided key (#{path_to_key}). Please provide valid path and try again."
  end
end
ssh_base_dir() click to toggle source
# File lib/client/util/ssh_util.rb, line 64
def self.ssh_base_dir
  "#{OsUtil.home_dir}/.ssh"
end
ssh_known_hosts_path() click to toggle source
# File lib/client/util/ssh_util.rb, line 68
def self.ssh_known_hosts_path
  "#{ssh_base_dir}/known_hosts"
end