I found a nice way to open a terminal with SSH to user@host if you click on a link that looks like this:


I guess the above solution works. It is great.

I need to get this working on many PCs. Is there already a package which does the enable SSH URLs?

  • No, but you can use whatever process you'll use to install such a package to instead run those commands. – muru Dec 17 '15 at 8:29
  • I do not know of any package that does this, but if deploying to many instances, why not just make a shell script and run that on every machine? – Robobenklein Dec 21 '15 at 15:34
  • @robobenklein yes, running a script an all machines would work. But what happens to those machines which are down when I run my loop over all machines? – guettli Dec 21 '15 at 15:56
  • @guettli how do you deploy packages? could you not also add a simple function to deploy a script? Otherwise, you could just package the script as an install for a .deb. – Robobenklein Dec 21 '15 at 18:55

No, there is no package for this because there is already support for it, you just have to enable it.

To enable it in a gnome desktop: (How to open ssh://username@hostname link)

gconftool-2 --set --type=bool /desktop/gnome/url-handlers/ssh/enabled true
gconftool-2 --set --type=string /desktop/gnome/url-handlers/ssh/command 'gnome-terminal -e "%s"'
gconftool-2 --set --type=bool /desktop/gnome/url-handlers/ssh/needs_terminal false

My script to install the handler application:

# We need root to install
if [ "$(id -u)" != "0" ]; then
  echo "This script must be run as root" 1>&2
  exit 1

# In case file exists
if [ -f "/usr/local/bin/ssh-url-handler" ]
  echo "Found an old install, moving to ssh-url-handler.old"
  mv /usr/local/bin/ssh-url-handler /usr/local/bin/ssh-url-handler.old

# Install handler file
touch /usr/local/bin/ssh-url-handler
echo '#!/bin/sh' >> /usr/local/bin/ssh-url-handler
echo 'd=${1#ssh://}' >> /usr/local/bin/ssh-url-handler
echo 'x-terminal-emulator -x bash -c "ssh $d" &' >> /usr/local/bin/ssh-url-handler
chmod a+x /usr/local/bin/ssh-url-handler

# Check that it is there
type ssh-url-handler >/dev/null 2>&1 || echo "Warning: the ssh-url-handler could not be found! Please check that /usr/local/bin is in the PATH"

# Now for the desktop piece:
if [ -f "/usr/share/applications/ssh-url-handler.desktop" ]
  echo "Found an old desktop handler, moving to .old"
  mv /usr/share/applications/ssh-url-handler.desktop /usr/share/applications/ssh-url-handler.desktop.old

touch /usr/share/applications/ssh-url-handler.desktop
echo "[Desktop Entry]" >> /usr/share/applications/ssh-url-handler.desktop
echo "Type=Application" >> /usr/share/applications/ssh-url-handler.desktop
echo "Name=SSH URL Handler" >> /usr/share/applications/ssh-url-handler.desktop
echo "Exec=ssh-url-handler %u" >> /usr/share/applications/ssh-url-handler.desktop
echo "Icon=utilities-terminal" >> /usr/share/applications/ssh-url-handler.desktop
echo "StartupNotify=false" >> /usr/share/applications/ssh-url-handler.desktop
echo "MimeType=x-scheme-handler/ssh;" >> /usr/share/applications/ssh-url-handler.desktop
chmod a+x /usr/share/applications/ssh-url-handler.desktop

Just drop that into the install.sh of any debian package. You can easily do this using https://github.com/jordansissel/fpm/wiki to make your own package and distribute that.

| improve this answer | |
  • Why is it not supported out of the box like the "mailto:" protocol? – guettli Dec 22 '15 at 11:09
  • @guettli My guess is that the mailto: protocol is universal, and has many applications that handle it. The SSH protocol is not a common desktop mime application, and has a larger chance for a vulnerability to be found in using it. (Perhaps unwillingly connecting to a server with agent-forwarding, where the evil server then can use your private key.) Since most normal people won't be using it very often, it made sense not to leave any dangling ends lying around. – Robobenklein Dec 22 '15 at 14:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.