Module: CemAcpt::Utils::SSH

Defined in:
lib/cem_acpt/utils/ssh.rb

Overview

SSH-related utilities

Defined Under Namespace

Modules: Ephemeral Classes: Keygen

Class Method Summary collapse

Class Method Details

.clean_ephemeral_keysObject



152
153
154
# File 'lib/cem_acpt/utils/ssh.rb', line 152

def self.clean_ephemeral_keys
  CemAcpt::Utils::SSH::Ephemeral.clean
end

.create(key_name, **options) ⇒ Object



130
131
132
133
134
# File 'lib/cem_acpt/utils/ssh.rb', line 130

def self.create(key_name, **options)
  keygen = Keygen.new
  keys = keygen.create(key_name, **options)
  keys + ['/dev/null']
end

.create_known_hosts(known_hosts, overwrite: true, keydir: default_keydir) ⇒ Object



136
137
138
139
140
141
142
# File 'lib/cem_acpt/utils/ssh.rb', line 136

def self.create_known_hosts(known_hosts, overwrite: true, keydir: default_keydir)
  return nil unless known_hosts

  kh_file = file_path(known_hosts, keydir: keydir)
  ::File.open(kh_file, 'w') { |f| f.write("\n") } unless ::File.exist?(kh_file) && !overwrite
  kh_file
end

.default_keydirObject



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

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(keydir: default_keydir) ⇒ Object



148
149
150
# File 'lib/cem_acpt/utils/ssh.rb', line 148

def self.ephemeral_ssh_key(keydir: default_keydir)
  CemAcpt::Utils::SSH::Ephemeral.create(keydir: keydir)
end

.file_path(file_name, keydir: default_keydir) ⇒ Object



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

def self.file_path(file_name, keydir: default_keydir)
  ::File.join(keydir, file_name)
end

.key_paths(file_name, keydir: default_keydir) ⇒ Object

Takes a file name (not path) and optional SSH key directory and returns the paths to the private key and public key based on the file name given.

Parameters:

  • file_name (String)

    The base name for the keys

  • keydir (String) (defaults to: default_keydir)

    An optional SSH key directory



126
127
128
# File 'lib/cem_acpt/utils/ssh.rb', line 126

def self.key_paths(file_name, keydir: default_keydir)
  [file_path(file_name, keydir: keydir), file_path("#{file_name}.pub", keydir: keydir)]
end

.set_ssh_file_permissions(*files) ⇒ Object



144
145
146
# File 'lib/cem_acpt/utils/ssh.rb', line 144

def self.set_ssh_file_permissions(*files)
  files.uniq.compact.map { |p| ::File.chmod(0o600, p) }
end

.ssh_keygenObject



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

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