Sha256: 30cd025ccd141d5ac2d68316a7e6ad8a4653da0ff2ffaa5e0aabaa4c0448f2d6
Contents?: true
Size: 1.68 KB
Versions: 1
Compression:
Stored size: 1.68 KB
Contents
require 'net/ssh' require 'etc' class TDIPlan < TDI def ssh(plan) plan.select { |key, val| val.is_a?(Hash) }.each_pair do |case_name, case_content| # Validate. unless /^[^@]+@[^@]+$/.match(case_name) puts "ERR: Invalid ssh plan format \"#{case_name}\". Case name must match pattern \"user@host\".".light_magenta exit 1 end # Parse. remote_user = case_name.split('@').first host = case_name.split('@').last local_users = [case_content['local_user']].flatten # Users. local_users.each do |local_user| # Privileged user. begin Process.euid = 0 rescue => e puts "ERR: Must run as root to change user credentials #{e}).".light_magenta exit 1 end # Change credentials to local user. begin Process.euid = Etc.getpwnam(local_user).uid # SSH needs to know the user homedir in order to use the right # private/public key pair to authenticate. ENV['HOME'] = Etc.getpwnam(local_user).dir rescue => e puts "ERR: User \"#{local_user}\" not found (#{e}).".light_magenta exit 1 end begin timeout(5) do ssh_session = Net::SSH.start(host, remote_user, :auth_methods => ['publickey']) ssh_session.close success "SSH (#{local_user}): #{remote_user}@#{host}" end rescue failure "SSH (#{local_user}): #{remote_user}@#{host}" end end end # Change credentials back to privileged user. Process.euid = 0 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
tdi-0.1.0 | helper/ssh.rb |