Module: TrainPlugins::Juniper::SshAskpass
- Included in:
- BastionProxy
- Defined in:
- lib/train-juniper/connection/ssh_askpass.rb
Overview
SSH_ASKPASS script management for automated password authentication
Instance Method Summary collapse
-
#create_ssh_askpass_script(password) ⇒ String
Create temporary SSH_ASKPASS script for automated password authentication.
-
#create_unix_askpass_script(password) ⇒ String
private
Create Unix shell script for SSH_ASKPASS.
-
#create_windows_askpass_script(password) ⇒ String
private
Create Windows PowerShell script for SSH_ASKPASS.
-
#setup_bastion_password_auth ⇒ Object
Set up SSH_ASKPASS for bastion password authentication.
Instance Method Details
#create_ssh_askpass_script(password) ⇒ String
Create temporary SSH_ASKPASS script for automated password authentication
23 24 25 26 27 28 29 |
# File 'lib/train-juniper/connection/ssh_askpass.rb', line 23 def create_ssh_askpass_script(password) if Gem.win_platform? create_windows_askpass_script(password) else create_unix_askpass_script(password) end end |
#create_unix_askpass_script(password) ⇒ String (private)
Create Unix shell script for SSH_ASKPASS
58 59 60 61 62 63 64 65 66 |
# File 'lib/train-juniper/connection/ssh_askpass.rb', line 58 def create_unix_askpass_script(password) script = Tempfile.new(['ssh_askpass', '.sh']) script.write("#!/bin/bash\necho '#{password}'\n") script.close File.chmod(0o755, script.path) @logger.debug("Created SSH_ASKPASS script at #{script.path}") script.path end |
#create_windows_askpass_script(password) ⇒ String (private)
Create Windows PowerShell script for SSH_ASKPASS
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/train-juniper/connection/ssh_askpass.rb', line 36 def create_windows_askpass_script(password) # :nocov: # Create Windows PowerShell script script = Tempfile.new(['ssh_askpass', '.ps1']) # PowerShell handles escaping better, just escape quotes escaped_password = password.gsub("'", "''") script.write("Write-Output '#{escaped_password}'\r\n") script.close # Create a wrapper batch file to execute PowerShell with bypass policy wrapper = Tempfile.new(['ssh_askpass_wrapper', '.bat']) wrapper.write("@echo off\r\npowershell.exe -ExecutionPolicy Bypass -File \"#{script.path}\"\r\n") wrapper.close @logger.debug("Created SSH_ASKPASS PowerShell script at #{script.path} with wrapper at #{wrapper.path}") wrapper.path # :nocov: end |
#setup_bastion_password_auth ⇒ Object
Set up SSH_ASKPASS for bastion password authentication
10 11 12 13 14 15 16 17 18 |
# File 'lib/train-juniper/connection/ssh_askpass.rb', line 10 def setup_bastion_password_auth bastion_password = @options[:bastion_password] || @options[:password] return unless bastion_password @ssh_askpass_script = create_ssh_askpass_script(bastion_password) ENV['SSH_ASKPASS'] = @ssh_askpass_script ENV['SSH_ASKPASS_REQUIRE'] = 'force' @logger.debug('Configured SSH_ASKPASS for automated bastion authentication') end |