Module: CemAcpt::Utils::SSH

Defined in:
lib/cem_acpt/utils.rb

Overview

SSH-related utilities

Class Method Summary collapse

Class Method Details

.acpt_known_hosts(keydir: default_keydir, file_name: 'acpt_known_hosts', overwrite: true) ⇒ Object



112
113
114
115
116
# File 'lib/cem_acpt/utils.rb', line 112

def self.acpt_known_hosts(keydir: default_keydir, file_name: 'acpt_known_hosts', overwrite: true)
  kh_file = ::File.join(keydir, file_name)
  ::File.open(kh_file, 'w') { |f| f.write("\n") } unless ::File.exist?(kh_file) && !overwrite
  kh_file
end

.default_keydirObject



93
94
95
96
97
98
# File 'lib/cem_acpt/utils.rb', line 93

def self.default_keydir
  ssh_dir = ::File.join(ENV['HOME'], '.ssh')
  raise "SSH directory at #{ssh_dir} does not exist" unless ::File.directory?(ssh_dir)

  ssh_dir
end

.ephemeral_ssh_key(type: 'rsa', bits: '4096', comment: nil, keydir: default_keydir) ⇒ Object

Raises:

  • (ArgumentError)


100
101
102
103
104
105
106
107
108
109
110
# File 'lib/cem_acpt/utils.rb', line 100

def self.ephemeral_ssh_key(type: 'rsa', bits: '4096', comment: nil, keydir: default_keydir)
  raise ArgumentError, 'keydir does not exist' unless ::File.directory?(keydir)

  keyfile = ::File.join(keydir, 'acpt_test_key')
  keygen_cmd = [ssh_keygen, "-t #{type}", "-b #{bits}", "-f #{keyfile}", '-N ""']
  keygen_cmd << "-C \"#{comment}\"" if comment
  _, stderr, status = Open3.capture3(keygen_cmd.join(' '))
  raise "Failed to generate ephemeral SSH key: #{stderr}" unless status.success?

  [keyfile, "#{keyfile}.pub"]
end

.set_ssh_file_permissions(priv_key, pub_key, known_hosts) ⇒ Object



118
119
120
# File 'lib/cem_acpt/utils.rb', line 118

def self.set_ssh_file_permissions(priv_key, pub_key, known_hosts)
  CemAcpt::Utils::File.set_permissions(0o600, priv_key, pub_key, known_hosts)
end

.ssh_keygenObject



84
85
86
87
88
89
90
91
# File 'lib/cem_acpt/utils.rb', line 84

def self.ssh_keygen
  bin_path = `#{ENV['SHELL']} -c 'command -v ssh-keygen'`.chomp
  raise 'Cannot find ssh-keygen! Install it and verify PATH' unless bin_path

  bin_path
rescue StandardError => e
  raise "Cannot find ssh-keygen! Install it and verify PATH. Orignal error: #{e}"
end