Hacker News new | past | comments | ask | show | jobs | submit login
Shuttle - A simple SSH shortcut menu for OS X (fitztrev.github.io)
200 points by fitztrev on July 11, 2013 | hide | past | favorite | 109 comments



Not to be confused with sshuttle, a transparent proxy server that forwards over SSH: https://github.com/apenwarr/sshuttle


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?


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.


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!


> ... 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". 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 (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! =)


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?


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.


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.


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.


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!


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?


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.


Tab completion?


Normally, sure. But we're talking about opening a remote keyboard-interactive ssh session in this specific case.

Your hands are going to the keyboard.

We're discussing whether or not it's worth screwing around with the mouse beforehand.


This was my first thought too, but then I considered the case where I'm already using the mouse and want to open a terminal and ssh to an app server. With this it would be two clicks, where without out it requires a move to the keyboard, a hotkey, and two keystrokes. However, moving to the keyboard is necessary after the SSH anyway, so that step doesn't really count against the latter.

Is it for me? I'll try it, but I don't think so. But I think it serves a need for some people, and I can always get behind ideas that serve or improve--successful or not--workflow/dev needs.

Great work Trevor!


Command-space t e r enter

Command-n

zz enter


Yes, I could memorize this and 2000 other arbitrary shortcuts. Or, you know, I could use the mouse.

The times per day I open a new SSH session (and I'm a heavy SSH user) are so miniscule that keyboard vs mouse wouldn't do anything than give me a false sense of superiority.

That said, I already know this Spotlight shortcut, and yet I fail to see how eleven (ELEVEN) keypresses as described above are any better than lazily moving my mouse and clicking on a dropdown menu.

No, I don't want to "have my hands down on the keyboard all the time", like they are glued there. Not even when I'm programming. I'm drinking my coffee at the same time, for one.

And my commits (including typed and discarded code) are no more than 1000 lines per day. I could write those in 5 minutes, if keyboard dexterity was all it took to program.

So fuck yeah, I'll move my hands. I move them anyways, to interact with graphical elements that do need a mouse, to drink my coffee, to grab a pen and pencil and do some rough sketch, to scratch my neck, to answer the phone, to fix my glasses and tons of other things. And to not have them go numb.


First, Cmd+space i enter, a enter saves 6 key strokes.

Second, why would you open a new terminal window, then immediately open a new terminal window?

Third, I accounted for this in my post.

Finally, what kind of response is this? Are you posting a how-to? Are you making a counter point? Are you just being snarky?


Terminal is always open. Hitting it from spotlight just foregrounds it.


Answer: as a browser for hosts you don't use commonly.

Long ago I wrote a similar ssh target browser, in just a few lines of Perl/Tk, that pulled all the hosts from my then-employer's server database (several hundred of them, thousands if you included our dev/test VMs, and constantly changing) and created a simple tree view for reviewing and navigating the set, based on location, functional role, sequence number, customer, software level etc.

Also handy/dangerous was having it launch mirrored gterms for a given set.

Half the staff used this tool. I'd be surprised if most admins of moderate-to-large installations didn't have something similar.


Curious. How do you automatically reattach screen? Thanks!


ssh -t myhost.example.net 'screen -D -RR'


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.


I use ~/.ssh/config and have the following in my .bashrc:

https://gist.github.com/oogali/5975670

Tab completion for scp/sftp/ssh based on my ~/.ssh/config.


"... 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.


The Host directive in an ssh_config file supports wildcards.


They said the purpose of using a .json file was so that your configuration could be synced by dropbox or some other cloud service. I would NOT put my .ssh with all my private keys on dropbox.


You could just make ~/.ssh/config a symlink to your config file in your dropbox folder. No need to put private keys on dropbox.


Yep.

Symlink'ing a ssh config file with Dropbox was the best decision I've made in a long time.

Same config file no matter which PC I am using, and you can always look up the IP/Hostname and which key it uses (don't store keys on dropbox for "critical" systems) through the dropbox web interface.


I agree, this would make a lot more sense...


I agree with you there. I have an app that I've been building that works exactly like Shuttle but reads from ~/.ssh/config and has a front-end for editing as well.


Im such a noob. Thank you for introducing me to this


^ this. Please provide a migration tool.


yah I would love to these feature implemented


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

[0] http://alfredapp.com

[1] https://github.com/isometry/alfredworkflows/tree/master/net....


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.


I had no idea you could execute commands from Alfred that way. Top tip! Thanks.


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


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


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


You should probably add some install instruction for the workflow, because I have no idea where to start.


Just download the "ssh.alfredworkflow" file and run it, it should automatically be imported to Alfred's Worflows: https://github.com/isometry/alfredworkflows/blob/master/ssh....


This is what I'm currently doing.

* Alfred for '>' command * an alias for each server. * Autologin using ssh keys.


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/). This looks like it does just about the same thing. Thanks a ton!


Congrats and welcome to the fold :-)


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


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' :(


Either you have a need, and upgrade. Or you don't have a need and don't need shuttle.

Targetting the latest release make life easier for devs.


The extension of this is that most people will update, so targeting the latest version isn't bad.


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


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.


>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.


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) 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.


Instead of asking yourself why you should'nt upgrade you should probably ask youself why you should. So what's the reason for upgrading?


See apple.com for your answer. I can't believe on hn you'd ask why anyone should upgrade. Being on the latest version is more secure for one. People can stick with old versions, but then they'll miss out on the new stuff. For some that doesn't matter, but most of hn are early adopters so using the latest would be the norm. While osx has introduced some annoying changes, for those with the skills, or the ability to use google, they are easily disabled.


Looking at apple.com's list of features for mountain lion

Lets see what was added in mountain lion that I would use:

* Improved preference pane (OK, this might be good)

* Accessibility pane available from anywhere (No)

* New braille display support (No)

* Voice Over stuff (no)

* AirPlay Mirroring (Don't have anything that can use that)

* Auto Save (Don't really want this, I use vim for most things anyway)

* Built-in Sharing (Might be cool, but meh)

* Calendar (I use google calendar, so no)

* Contacts (I don't use this)

* Dashboard (I don't use that)

* Dictation (Cool, but no)

* Dictionary (Not really using this either)

* Facebook (Nope, not using any of that)

* Features for China (I don't need these)

* Finder (lets take a closer look)

* Inline progress for downloads and file copies (Ok, not bad, but I don't normally mount any servers or stuff. I can just scp stuff that I need, or git pull)

* Easy encryption (Yay, this is neat)

* Share button (Nope)

* Customizable sidebar (Huh, wasn't it customizable before?)

* Tap for Quick Look (This is neat, I'll use it a few times)

* Game Center (Dont' care)

* Gatekeeper (Don't want)

* iCloud (Not going to use)

* Launchpad Search (Don't use launchpad)

* Mac App Store (Nothing really great in here)

* Mail (I use gmail, so don't care)

* Messages (Don't use)

* Notes (Might be cool, but I don't think I'll use.)

* Notification (I already use Growl, don't really need this, it's just going to be another thing to configure. Maybe I'll like it, I don't know)

* Photo Booth (Now you can add pictures to Twitter! Don't need that)

* Power Nap (Might be cool)

* Preview (I use Skim.app, so don't care)

* QuickTime X (Don't really care)

* Reminders (Don't really care)

* Safari (I'm using Chrome)

* Security (Some stuff might be good, nothing super important)

* System (Nothing too great in this section)

* TextEdit (I use vim)

* Time Machine (I only need one place to backup, so the multiple places to backup isn't that important right now (might be in the future), but the encrypted back ups are nice)

* Twitter (Don't care)

So I get:

* Improved preference pane

* Power Nap

* Easy encryption

* Tap for Quick Look

* Time Machine

Not really worth the price of updating.

I guess I'll update once the next one comes out, since they fix multiple monitors with Mission Control to work more the way I like it.


That might be true for 10.7 to 10.8, but 10.6 to 10.8 is a bigger gap. It's all that you listed (and most users would gain more than that) plus ASLR, TRIM support, resizing windows from any edge, AirDrop, improved Finder, much better multi-touch support, the recovery partition, etc.

I was reluctant to upgrade from 10.6 to 10.7 because I really disliked the changes to Spaces/Expose, but even last year it was becoming more and more common to see apps dropping support for 10.6. With Mavericks around the corner, 10.7 will start seeing the same treatment soon. At $20 to upgrade, it's more than worth it.


Because SL had a far better workflow. 10.8 may have a cleaner, flatter, better-looking UI and some nice kernel features underneath, but Mission Control is a disaster compared to Spaces + Exposé.

I still dual-boot 10.6 and 10.8. I find myself in 10.8 more often now, but 10.6 is still a better user experience.


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/

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

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


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


I use iTerm2 (with Solarized theme), zsh, and Oh My Zsh (with the agnoster theme).


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

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


Thanks for the share. Its a great theme



Yeah it looks great. Was just about to ask that myself haha


Agreed, that is a must have.


I second this!


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.


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.


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.


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.


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/


I used the built-in Quicktime Player to do a screen recording. Then I used an online mov-to-gif converter. I had a hard time getting it down to a decent size, though. Hope that helps!


I use ffmpeg to record my desktop and convert the output to animated gif.

I'm not sure about OS X, but FreeBSD and Linux distros should have ffmpeg in ports/repos.

There's also byzanz for ubuntu.


If anyone needs something similar for Windows, use 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...


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


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...


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


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 ).


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').


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.


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


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.


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

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


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.


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!


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.


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.


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


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!"


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


That is a great idea. Thanks!


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.


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


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.


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).


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?


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.


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.


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.


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


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


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


https://twitter.com/fitztrev/status/355340535659122688

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


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


Something like this would be awesome for vagrant!


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...

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.


On windows 7+ putty does this by default.


Instant win




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: