Module: CemAcpt::Utils::SSH
- Defined in:
- lib/cem_acpt/utils.rb
Overview
SSH-related utilities
Class Method Summary collapse
- .acpt_known_hosts(keydir: default_keydir, file_name: 'acpt_known_hosts', overwrite: true) ⇒ Object
- .default_keydir ⇒ Object
- .ephemeral_ssh_key(type: 'rsa', bits: '4096', comment: nil, keydir: default_keydir) ⇒ Object
- .set_ssh_file_permissions(priv_key, pub_key, known_hosts) ⇒ Object
- .ssh_keygen ⇒ Object
Class Method Details
.acpt_known_hosts(keydir: default_keydir, file_name: 'acpt_known_hosts', overwrite: true) ⇒ Object
110 111 112 113 114 |
# File 'lib/cem_acpt/utils.rb', line 110 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_keydir ⇒ Object
91 92 93 94 95 96 |
# File 'lib/cem_acpt/utils.rb', line 91 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
98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/cem_acpt/utils.rb', line 98 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, SecureRandom.hex(16)) 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
116 117 118 |
# File 'lib/cem_acpt/utils.rb', line 116 def self.(priv_key, pub_key, known_hosts) CemAcpt::Utils::File.(0o600, priv_key, pub_key, known_hosts) end |
.ssh_keygen ⇒ Object
84 85 86 87 88 89 |
# File 'lib/cem_acpt/utils.rb', line 84 def self.ssh_keygen bin_path = `command -v ssh-keygen`.chomp raise 'Cannot find ssh-keygen! Install it and verify PATH' unless bin_path bin_path end |