
Shuttle - A simple SSH shortcut menu for OS X - fitztrev
http://fitztrev.github.io/shuttle/
======
ch0wn
Not to be confused with sshuttle, a transparent proxy server that forwards
over SSH:
[https://github.com/apenwarr/sshuttle](https://github.com/apenwarr/sshuttle)

~~~
cpenner461
This looks pretty sweet. Seems like it'd work well with EC2 for transparently
getting you into the private hostnames without having to open security groups
and use something like FoxyProxy. Anyone used it for this?

~~~
jlgaddis
I haven't looked at it all, but it sounds like you're wanting something like
the functionality that SSH's "ProxyCommand"?

As an example, we lockdown our servers so that they are only accessible via
SSH from a few hosts. I got tired of SSH'ing into server A just to SSH into
server B, so I set up my ~/.ssh/config file so that when I "ssh serverB", it
uses the ProxyCommand functionality to basically do that for me.

Here's what it looks like in ~.ssh/config:

    
    
        Host serverB
            ProxyCommand ssh serverA.example.com -W %h:%p
    

When I "ssh serverB", it connects to serverA first and then connects to
serverB. I could be wrong but it sounds like that is what you were talking
about.

~~~
cpenner461
Pretty close yeah, except that serverB is only listening on a private IP, and
I want to connect to it in by web browser (http). My primary use case is with
hadoop clusters, where I access the jobtracker ui on the public hostname, but
when I drill down into task logs it points to private/internal IPs. FoxyProxy
allows me to access the private IPs directly/transparently, but I do most of
my browsing with Chrome these days, so it'd be nice to just be able to do it
all in one browser.

ProxyCommand looks pretty cool though, wasn't aware of it - thanks!

~~~
jlgaddis
> ... except that serverB is only listening on a private IP and I want to
> connect to it in by web browsing (http) ...

Still possible, with ssh's "-D" option that basically turns a remote SSH
server into a (HTTP) proxy server!

    
    
        $ ssh -D 4444 serverA.example.com
    

Log in and keep this session active.

In your browser (I use a separate browser, permanently configured this way),
configure it to use a (SOCKS5) proxy server for all traffic. The proxy server
should be "localhost:4444".

In your address bar, navigate to
"[http://serverB.example.com"](http://serverB.example.com"). The HTTP traffic
is sent over the SSH tunnel to serverA and from there it goes out to the
network to its destination. To the destination server (serverB), it appears
that the request originated from serverA and that's where the response will go
(at which point it is again encrypted and sent over the SSH tunnel back to
your local machine). Visit [http://icanhazip.com](http://icanhazip.com) (or a
similar site), for example, and you'll see that, to the remote web server, it
appears that traffic is coming from serverA.

This isn't the most eloquent explanation, sorry. Look into "SSH socks proxy"
and you should find much better explanations. It's really much easier than it
sounds! =)

------
sneak
I have two-byte aliases for ssh to all of the hosts I use commonly, doesn't
everyone? (It even reattaches my remote screen session.)

Why would I want to touch the mouse?

~~~
alphakappa
Why is this even a question? It's a tool that someone will want to use. As
long as there is a mouse, there will be tools that use it. You are essentially
asking 'why does this tool exist', which is an irrelevant question and is
needless negativity.

~~~
sbochins
I'm not sure that is completely fair. He was just making the point that using
only your keyboard is much faster and there are already built in tools for
doing that. He may have just been asking why someone would want to use a mouse
over a keyboard for this type of thing.

~~~
gmisra
And the parent's point is that "why doesn't everybody use all keyboard
shortcuts all the time" is a HN refrain that is tired and smug, and yet still
the top-voted comment here.

~~~
arthulia
And the answer is because ssh is entirely keyboard driven. There is no good
reason to clumsily mouse through a drop-down menu, then move your hand back to
your keyboard, when you can type "zz<enter>" in an open terminal and you're
ready to go!

~~~
eropple
Cool, how do you do that with a dynamically changing list of hosts that you're
getting from somewhere else? I would _totally_ use this with a team dropbox
and a .shuttle.json file full of all of our systems.

Or, put another way: think beyond your own use case before posting, yeah?

~~~
sneak
Crontab a job to generate the aliases and write them to a file, source the
file from .profile. Alternately, store the list in an alias-defining file
instead of json. Source directly from the dropbox.

No installation required.

------
PascalW
Nice job, for me it can't beat a ~/.ssh/config entry though.

I wonder why it's not reading ~/.ssh/config btw, should be doable.

~~~
zeckalpha
"... it makes it easy to generate a dynamic list of hosts from your hosting
provider (if they have an API), so you're always up-to-date."

It should at least provide a mapping from the json to ~/.ssh/config formats.

~~~
sneak
The Host directive in an ssh_config file supports wildcards.

------
yankcrime
For me you can't beat the combination of Alfred [0] and the SSH workflow [1].

[0] [http://alfredapp.com](http://alfredapp.com)

[1]
[https://github.com/isometry/alfredworkflows/tree/master/net....](https://github.com/isometry/alfredworkflows/tree/master/net.isometry.alfred.ssh)

~~~
Osmium
Or (in Alfred) just type:

>ssh [host]

If you keep your ~/.ssh/config up to date and can remember your host names, I
find it quicker to do that than bothering with the workflow.

~~~
hydrozen
I don’t think alfred does that by default, does it? Even with the powerpack.

~~~
BHSPitMonkey
Assuming it just runs it as a shell command (and fires up a shell in doing
so), that would work.

~~~
hydrozen
Ahh ok, I misread what he was saying! Missed that > at the beginning.

------
TheBrockEllis
This is amazing! I am currently in the process of moving from a Windows
machine to a Mac (first Mac of my life...) and was looking for a replacement
to AutoPuTTY
([http://www.r4dius.net/autoputty/](http://www.r4dius.net/autoputty/)). This
looks like it does just about the same thing. Thanks a ton!

~~~
coreymaass
Congrats and welcome to the fold :-)

------
maslam
Ignore the disparaging comments in Hacker News. This is really nice. Thanks
for your heard work - I'm using it already!

------
igravious
Aargh. Only works in 10.8.x - I like new tech but I see no need to upgrade
beyond 10.6.8 at the mo' :(

~~~
joshstrange
I'm not trying to be jerk but, why?

~~~
roryokane
I stay on OS X 10.6 because later versions drop support for PowerPC (Rosetta)
applications. Many programs - abandoned programs and games - do not have Intel
versions. And some games have Intel versions, but the Intel version costs
money or is incompatible with previous saved games. I use these old programs
rarely, but like to have the option of opening their files or playing those
games.

Such applications include Airburst Extreme, the Fountain Music iTunes
visualizer, Marble Blast Gold, N-Ball, Noise, SilverCreator v1.5, Sonic Robo
Blast II, Super DX Ball, Super Phoenix, Water Tower, and Wire Hang Redux.
There may be some plug-ins for various apps I'm forgetting, too.

~~~
coldtea
> _Such applications include Airburst Extreme, the Fountain Music iTunes
> visualizer, Marble Blast Gold, N-Ball, Noise, SilverCreator v1.5, Sonic Robo
> Blast II, Super DX Ball, Super Phoenix, Water Tower, and Wire Hang Redux.
> There may be some plug-ins for various apps I 'm forgetting, too._

Sounds like nothing like a reason to keep using Rosetta. I mean, seriously,
"Fountain Music iTunes visualizer" and "Sonic Robo Blast II"?

Some business use case I'd understand (some proprietary program that you just
have to use). But those? Find some substitute games and programs and move on.

> _I use these old programs rarely, but like to have the option of opening
> their files or playing those games._

Sounds more like a soft case of hoarding to me.

In any case, just move to 10.8 and keep 10.6 on a VM (or a bootable
USB/external drive) for those games.

~~~
roryokane
It’s true, I hoard a lot of digital things. Keeping a VM sounds like a good
solution that allows me to upgrade to the latest OS without permanently losing
any programs.

However, I think that the Fountain Music iTunes visualizer
([http://binaryminded.com/fountainmusic.html](http://binaryminded.com/fountainmusic.html))
is actually the program I’ll miss the most after I upgrade. I enjoy listening
actively to my music, paying attention to the musical details. And the visuals
produced by Fountain Music, unlike every other visualizer I’ve seen, actually
reflect the audio very well. It’s not just a mesmerizing screensaver that is
theoretically tied to the audio somehow – you can clearly hear a connection
between each note playing and each fountain of particles shooting up. The fact
that the visuals reflect the music (most of the time) can put me more
emotionally into the track, because I’m getting complementary signals through
my eyes and ears.

Also, there is rarely such a thing as “substitute games”. That’s what makes
games different from other programs – well-made games, even ones in the same
genre, have their own unique, irreplaceable features. They are like books and
movies in that regard. That’s why emulators for consoles like the SNES and the
Dreamcast are still around – people don’t want to give up their favorite old
games.

------
jameswyse
For a long time I was adding aliases to .ssh/config manually and managing
things that way but a coworker introduced me to a couple of tools which made
things much easier!

One is a tool similar to Shuttle to access all our EC2 instances called
Elastics[1] (Mac). It provides a menu listing every EC2 instance, showing it's
status, IPs, config details, cpu usage, etc and allows you to click to open
SSH. It's not perfect but very handy!

I also use an in-house tool which queries the EC2 API to sync my .ssh/config
with aliases for every server based on EC2 tags. If you're interested it's
built with node.js using awssum [2] to query AWS and sshconf-upsert [3] to
update the config.

[1] [http://tundrabot.com/](http://tundrabot.com/)

[2] [https://github.com/awssum/awssum](https://github.com/awssum/awssum)

[2] [https://github.com/hughsk/sshconf-
upsert](https://github.com/hughsk/sshconf-upsert)

------
myoffe
What is that cool shell prompt that's in the video?

~~~
PascalW
I think it's Powerline [1] or at least inspired by Powerline.

[1]
[https://github.com/Lokaltog/powerline](https://github.com/Lokaltog/powerline)

~~~
schrodingersCat
Thanks for the share. Its a great theme

------
thedufer
Menu->Configure opens the configuration file in TextEdit, which is a disaster
since it has smart quotes on by default. I spent a significant amount of time
trying to figure out was wrong with your json parser before I realized what
was going on.

~~~
afshin
You can change the TextEdit preferences to always open files up as plain text
instead of rich text if this annoys you, by the way.

~~~
thedufer
It was opened as plain text. That option is orthogonal to smart quotes,
although it turns out those can be turned off globally as well. Thanks for
leading me in the right direction.

I still think there must be a better way to do it for Shuttle, though, given
what the defaults are. Even something as hacky as replacing smart quotes with
normal ones before json parsing would be pretty useful.

------
kevin818
Could anyone recommend a good/free program for making these kind of animated
gifs that record your computer (like the one on Shuttle's homepage)?

I've been trying to add the same kind of thing to my site but I don't know how
to do it.

~~~
loupeabody
I've heard and seen many good things about LICEcap[0]. There doesn't appear to
be a Linux install, just so you know.

[0][http://www.cockos.com/licecap/](http://www.cockos.com/licecap/)

------
arnehormann
If anyone needs something similar for Windows, use
[https://gist.github.com/arnehormann/5975783](https://gist.github.com/arnehormann/5975783)
and put all shortcuts with a folder into the quickstart part of the taskbar.
The hta file I link to is html with visual basic instead of JS - executable on
click, pretty compact, shows a dialog. Don't know if this breaks in later Win
versions though, I wrote this some years ago and it worked fine in Vista...

~~~
kryten
Or even better, right click putty on your taskbar in windows 7 and all your
profiles are listed.

~~~
arnehormann
Maybe I should have upgraded before switching to OS X :)

My approach still has one advantage: I have 60 user/server combinations and
can order them by user/rack/whatever by using subfolders. And it's possible to
assign custom icons, which I never did...

~~~
kryten
True. I only connect to two hosts and ssh on from there so non issue for me.

------
CptCodeMonkey
I have a widget like this for AWS+Virtualbox, it sorts all instances across
all regions into tag name groups, by ip, by region, and by instance type.
Unfortunately I know it only works for Windows and linux at the moment and my
company hasn't given me a green flag to release it.

Still this project is a lot prettier and appears to have been more refined
while mine was hobbled together in a hour or two and fit in one Python file (
reasonably, its not 10 files in one ).

------
HendrikR
Yet another way to have clickable short-cuts for opening SSH connections using
OS X (Safari only): OS X understands URL schemes like
ssh://username@hostname.tld:port. Throw it into the address bar or even save
this as a bookmark. Safari asks for permission before opening such non-http
protocols nowadays and transfers you to Terminal.app. Pro: Less clutter in
menu bar. Con: Safari only. (As for me, I prefer ~/.profile and 'alias').

~~~
fitztrev
I was actually going to do this at first. Something as simple as
openURL:"ssh://username@example.com", then let OS X handle opening the default
terminal. But I wasn't able to easily specify things like a different private
key (for AWS or Vagrant). This at least gives the user the ability to specify
any option that they could also specify on the command line.

~~~
jlgaddis
You can specify per-host keys in ~/.ssh/config (hint: "IdentityFile").

~~~
HendrikR
Right. Nevertheless, this tiny little menulet might be a nice starting point
for all those people who are not too experienced with secure shell sessions.

------
asayers
For a similar set-up for Linux, see [1]. Here we use dmenu to displays hosts
defined in .ssh/config, and open a connection to the selected host in a new
window. See [2] for the relevant script.

[1]:
[http://www.asayers.org/blog/ssh.html](http://www.asayers.org/blog/ssh.html)

[2]:
[https://gist.github.com/asayers/5975856](https://gist.github.com/asayers/5975856)

------
daviddoran
Installed. Nice little utility. As others probably do, I have ~/.ssh/config
set up so that it's as easy as `ssh us1` to SSH into a server.

------
geeksunny
Very nice! This is almost exactly like an app I've been slowly chipping away
at since last September, except my project acts as a front-end for reading and
editing the ~/.ssh/config file.

Still haven't gotten anything released but my WIP builds have certainly proven
useful in my daily workflow. Has been a nice project for teaching myself Obj-C
too!

------
laureny
Cute idea but I prefer to set up these profiles in iTerm2 because when I ssh
somewhere, I usually use a different background to differentiate the various
hosts (production, staging, etc...).

I also tend to split iTerm2 horizontally and vertically and create ssh
sessions in tabs, so I hardly ever need an ssh session in a brand new window.

------
jeffrogers
Aliases in ~/.ssh/config are my preference, but if clicking with the mouse is
your thing, why not throw Terminal.app in the Dock and click/hold the icon?
Choose New Remote Connection... and you can save all your services and hosts
right there. No additional processes running or clutter in the menubar.

------
duiker101
Is it just me or people are really lacking with names? Rocket, shuttles and
similar seems a bit overused...

------
normalocity
I like how the name "Shuttle" implies that this is going to make your SSHing
experience "take off", but anyone with an SSH config file is like:

"You mean you weren't doing this years ago? Why do I need a UI to get to a
shell command? I'm already in the shell!"

------
jrode
I love this more than for just ssh. I added a few other common commands into
the menu for easy access.

~~~
nickpersico
That is a great idea. Thanks!

~~~
jrode
Yep. Also, I understand what other people are saying about already having
aliases, I do too. But, as a visual list of servers I can ssh into it is a
nice reminder. Plus there are some files that I edit only from time to time
(php.ini, apache config, etc). I made shortcuts that throw those files into my
editor. Call me an amateur, but when I have to edit some of those my first
question is usually, where the hell is that file again? Anyway, I find this
tool useful.

------
thehodge
Just installed this, really nice little shortcut for the servers I connect to.

------
nicwolff
Terminal already does most of this, right? Preferences -> Settings -> "+" ->
Shell -> Run command "ssh user@hostname". And you can set the background color
&c for each host.

------
txutxu
Having exactly the same in fluxbox since more than 10 years ago...

And more "dynamic" and "generated" menus (all that is needed is the "include"
directive in the menu handler and cron).

------
davman
Thanks for this, will be saving me time.

As a quick feature suggestion, I wonder if it's possible to have a shortcut
key to get into the menu, and then possibly shortcut keys to every entry in
the list?

------
mimiflynn
I made alias' in my .bash_profile to handle this shortcut need, although, for
servers that I don't access often, it might be nice to have the dropdown list
as a reminder.

------
andyhmltn
This looks pretty awesome! I will try it out when I get back. I usually just
add a load of shortcuts to my hosts file but even that's a pain.

------
nicholassmith
This is a clever little utility, I've got my setup mostly scripted off but I'm
sure I'll find a use for it.

------
bluedino
Doesn't everyone do this with sessions in iTerm? Right-click on the dock icon
and then pick your server...

------
sev
Too bad it does not work with Leopard...so it becomes useless to me. Otherwise
looked like a nice idea!

------
jgarnham
What's he using in the video to give the almost path bar effect for the prompt
in terminal?

~~~
fitztrev
[https://twitter.com/fitztrev/status/355340535659122688](https://twitter.com/fitztrev/status/355340535659122688)

It's actually the Solarized Dark, to be more specific. :)

------
pclark
I love the design of this, from the animated gif tour, to the .json config

------
Axsuul
Something like this would be awesome for vagrant!

~~~
fitztrev
It actually works pretty well with Vagrant. In fact, I even have Vagrant in
the sample config file to show how it's done. :)

[https://github.com/fitztrev/shuttle/blob/master/Shuttle/shut...](https://github.com/fitztrev/shuttle/blob/master/Shuttle/shuttle.default.json#L37)

Basically just do `vagrant ssh-config box_name_here` to get the port and
identity file that you need to specify in the SSH command.

------
math0ne
On windows 7+ putty does this by default.

------
oellegaard
Instant win

