aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/leap_cli/commands/shell.rb51
1 files changed, 35 insertions, 16 deletions
diff --git a/lib/leap_cli/commands/shell.rb b/lib/leap_cli/commands/shell.rb
index cc17408..5c16f92 100644
--- a/lib/leap_cli/commands/shell.rb
+++ b/lib/leap_cli/commands/shell.rb
@@ -4,23 +4,42 @@ module LeapCli; module Commands
arg_name 'NAME' #, :optional => false, :multiple => false
command :ssh do |c|
c.action do |global_options,options,args|
- node = get_node_from_args(args)
- options = [
- "-o 'HostName=#{node.ip_address}'",
- "-o 'HostKeyAlias=#{node.name}'",
- "-o 'GlobalKnownHostsFile=#{path(:known_hosts)}'",
- "-o 'StrictHostKeyChecking=yes'"
- ]
- if node.vagrant?
- options << "-i #{vagrant_ssh_key_file}"
- end
- username = 'root'
- # the echo sets the terminal title. it would be better to do this on the server
- cmd = "ssh -l #{username} -p #{node.ssh.port} #{options.join(' ')} #{node.name}"
- log 2, cmd
- title = "echo -n \"\\033]0;#{username}@#{node.domain.full}\007\""
- exec "#{title} && #{cmd}"
+ exec_ssh(:ssh, args)
end
end
+ desc 'Log in to the specified node with an interactive shell using mosh.'
+ arg_name 'NAME'
+ command :mosh do |c|
+ c.action do |global_options,options,args|
+ exec_ssh(:mosh, args)
+ end
+ end
+
+ private
+
+ def exec_ssh(cmd, args)
+ node = get_node_from_args(args)
+ options = [
+ "-o 'HostName=#{node.ip_address}'",
+ "-o 'HostKeyAlias=#{node.name}'",
+ "-o 'GlobalKnownHostsFile=#{path(:known_hosts)}'",
+ "-o 'StrictHostKeyChecking=yes'"
+ ]
+ if node.vagrant?
+ options << "-i #{vagrant_ssh_key_file}"
+ end
+ username = 'root'
+ # the echo sets the terminal title. it would be better to do this on the server
+ ssh = "ssh -l #{username} -p #{node.ssh.port} #{options.join(' ')}"
+ if cmd == :ssh
+ command = "#{ssh} #{node.name}"
+ elsif cmd == :mosh
+ command = "mosh --ssh \"#{ssh}\" #{node.name}"
+ end
+ log 2, command
+ title = "echo -n \"\\033]0;#{username}@#{node.domain.full}\007\""
+ exec "#{title} && #{command}"
+ end
+
end; end \ No newline at end of file