Skip to content

Instantly share code, notes, and snippets.

@Ptico
Last active August 29, 2015 14:01
Show Gist options
  • Save Ptico/3c000735337b3d415f70 to your computer and use it in GitHub Desktop.
Save Ptico/3c000735337b3d415f70 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'yaml'
require 'uri'
require 'socket'
require 'timeout'
def knock(host, ports)
ports.each do |port|
puts "Knocking port #{port}"
begin
Timeout::timeout(2) do
begin
s = TCPSocket.new(host, port)
s.close
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
end
end
rescue Timeout::Error
end
end
end
host = ARGV[0]
db = YAML.load_file(File.expand_path('~/.ssh/connections.yml'))
config = db[host]
uri = URI.parse(config['uri'])
command = ['ssh']
command << %(-i #{config['keyfile']}) if config['keyfile']
command << %(-p #{uri.port}) if uri.port
command << %(-l #{uri.user}) if uri.user
command << uri.host
if config['knocking']
knock(uri.host, config['knocking'])
end
exec command.join(' ')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment