10

I'd like to create a url link that launches terminal (from webpage or browser such as chrome or safari) and ssh's to a box and launches remote commands (for example ls), in terminal it would look like: ssh user@1.2.3.4 'ls'

I've tried:

<a href='ssh://user@1.2.3.4 "ls"'>SSH with ls</a>

but this does nothing. and this works (without any commands):

<a href='ssh://user@1.2.3.4'>SSH</a>

Is this possible in HTML? I'll also accept answers that use Javascript.

hagope
  • 5,523
  • 7
  • 38
  • 52
  • You would need to have the user set what program the browser instructs to handle SSH links – Luca Kiebel Feb 28 '18 at 19:00
  • thats fine, assuming they are using `Terminal.app` on Mac os – hagope Feb 28 '18 at 19:16
  • This isn't really a programming question. If you search for "ssh url handler" and maybe add the target browser & platform, you'll find various pages discussing how to set this up. – Kenster Feb 28 '18 at 19:25
  • @Kenster no luck with that search – hagope Feb 28 '18 at 20:42
  • This is not possible using `Terminal.app`. It is still possible with `iTerm` if that works for you and not without a specific profile in iTerm. So by default you can't make it work across system without some configuration – Tarun Lalwani Mar 14 '18 at 09:27

3 Answers3

8

I have looked at multiple sources and tried different combinations and come to below understanding

  • There was no standard defined for the SSH URI to specify commands. So it is up to the process taking the input to understand how to use it
  • By default Terminal.app handles the SSH url and there is no documentation that it supports command
  • The app receiving the URL, doesn't get the URL as an argument, it needs to fetch it using some event. You can refer here for the same
  • You can configure iTerm to handle SSH handler and access the URL that was passed as describe here
  • You can create a custom app that handles the URL and does support commands and other things you want

Doing it using iTerm

You create a new profile and enable SSH URL handler in the same

SSH handling

So used below sample page

<html>
<body>
<a href="ssh://vagrant@vm/ls -alh">ls -alh</a>
</body>
</html>

And below command in my iTerm SSH profile

/usr/bin/ssh $$USER$$@$$HOST$$  $(echo $$PATH$$ | tr -d '/')

And the result was

Result

Of course you want to run a python script or something and pass it these values and let it do such things for additional functionalities. But this shows how you could achieve such a setup

Key References

url scheme for ssh: Calling command on remote host

https://unix.stackexchange.com/questions/75668/why-doesnt-the-ssh-command-follow-rfc-on-uri

https://groups.google.com/forum/#!topic/iterm2-discuss/r0Rk_WZaGWk

http://www.rubicode.com/Software/Bundles.html#RCDefaultApp

https://superuser.com/questions/379342/setting-iterm2-as-the-default-terminal-osx-lion

https://apple.stackexchange.com/questions/46666/how-to-access-a-clicked-url-in-a-url-handler-application-created-in-automator

https://support.shotgunsoftware.com/hc/en-us/community/posts/209485898-Launching-External-Applications-using-Custom-Protocols-under-OSX

Tarun Lalwani
  • 142,312
  • 9
  • 204
  • 265
0

I'm not very sure if this will help, but have you considered using a proxy / bridge to connect to server using SSH? For example: https://github.com/novnc/websockify

Websockify is a WebSocket to TCP proxy/bridge. This allows a browser to connect to any application/server/service.

This way instead of relying on SSH Client, you can directly communicate with server from your JS code.

Vivek Athalye
  • 2,974
  • 2
  • 23
  • 32
0

For Mac users on Big Sur 11.6 you can in fact do this with Apple apps. A simple test will show.

  1. Open up Notes.app or TextEdit.app and create some text.
  2. Select a word or sentence and hit Edit → Attach link (⌘K)
  3. Create the url as ssh://user@host or ssh://host in the dialog.

Viola!

rh0dium
  • 6,811
  • 4
  • 46
  • 79