Revision: 13056
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 6, 2009 19:40 by nate63179
Initial Code
#!/usr/bin/env ruby require 'rubygems' require 'net/ssh' $keyfile = "/Users/nate/.ssh/mypubkey.pub" $connect_host = "somehost.com" # Determines whether an ~/.ssh directory exists on the client side def remote_ssh_directory_exists?(connection) output = "" cmd_check_ssh = "test -e ~/.ssh && echo 1" connection.exec!(cmd_check_ssh) do |ch, stream, data| output << data if stream == :stdout end output.chomp == "1" end def remote_authorized_key_file_exists?(connection) output = "" cmd_check_keyfile = "test -e ~/.ssh/authorized_keys && echo 1" connection.exec!(cmd_check_keyfile) do |ch, stream, data| output << data if stream == :stdout end output.chomp == "1" end # Creats an authorized key file (.ssh/authorized_keys) on the remote host def create_authorized_keys_file(connection, stdout) connection.exec!("touch ~/.ssh/authorized_keys") stdout << "- Created ~/.ssh/authorized_keys\n" end begin print "Enter username to connect at host (e.g 'nate'@somehost.com) ->" uname = gets.chomp print "Remote password ->" pwd = gets.chomp local_key = open($keyfile) { |f| f.read } stdout = "" Net::SSH.start($connect_host, uname, :password => pwd) do |ssh| if remote_ssh_directory_exists?(ssh) stdout << "- Dependency: SSH folder exists [yes]\n" # check if the authorized_keys file exists if remote_authorized_key_file_exists?(ssh) stdout << "- Dependency: authorized_keys exists [yes]\n" else stdout << "- Dependency: authorized_keys exists [no]\n" create_authorized_keys_file(ssh, stdout) end else stdout << "- Dependency: SSH folder exists [no]\n" ssh.exec!("mkdir ~/.ssh") stdout << "- Created .ssh folder\n" create_authorized_keys_file(ssh, stdout) end ssh.exec!("echo \"#{local_key}\" >> ~/.ssh/authorized_keys") stdout << "- Added key to file [yes]" end puts stdout end
Initial URL
Initial Description
Initial Title
Script for posting SSH keys to a remote host
Initial Tags
ssh
Initial Language
Ruby