• My Links at Diigo
  • Ergonomics Resource

RANDOM.AC/CESS

Musings of a Web Technologist

Home 2017 Archives for July 2017

Archives for July 2017

Workflow magic (or so it seems :-)

Posted on 03 July 2017 by Ville Leave a Comment

A few days ago I came across the solution to a workflow issue I had been for long wishing could be done. Today I solved another one, and since they’re connected, I outline them below. Maybe they’ll make someone’s day! 🙂

I often work with remote servers that are almost always some flavor of Linux, most frequently Ubuntu/Debian, but also CentOS/Redhat. Despite of being a lifelong geek, I really dislike vi, finding it massively unintuitive. Maybe I haven’t figured out its intricacies, but I doubt it – it just doesn’t jive with me. In the 90’s I remembered most of Emacs’ chords by heart (or more likely by muscle memory), and really enjoyed using it, but for some reason I eventually stopped using it and only now am picking it up again. For now, however, my go-to editor in Linux is joe, which is handy enough (more so than pico or nano), but none of them still are as comfortable and flexible to use than a good GUI editor. In Windows & macOS my editor of choice is Sublime Text 3, and a few days ago I came across this answer in StackOverflow. Enter rmate/rsub! To make the magic happen, first install a small rmate script on your server (but call it rsub since you’re using Sublime Text rather than TextMate):

Shell
1
2
sudo curl -L --output /usr/local/bin/rsub https://raw.github.com/aurora/rmate/master/rmate
sudo chmod +x /usr/local/bin/rsub

Or perhaps like this (requires git, but makes it easier to keep rmate/rsub up-to-date by executing git pull in the cloned directory):

Shell
1
2
3
cd /opt
git clone https://github.com/aurora/rmate.git
ln -s /opt/rmate/rmate /usr/local/bin/rsub

Then add a few lines in ~/.ssh/config on your Mac (Windows users, keep reading, you haven’t been forgotten):

Shell
1
2
3
Host *
  RemoteForward 52698 127.0.0.1:52698
  UseKeyChain no

To exclude some domains where you’ll never use rsub, like GitHub:

Shell
1
2
3
4
5
6
Host github.com
  Hostname github.com
  User myUserName
  ForwardAgent no
  ClearAllForwardings yes
  IdentityFile ~/.ssh/myGitHubKey

(the significant line above is ClearAllForwardings yes)

Then install rsub package in Sublime (easiest done with Package Control), and now rsub someFileName command on the remote opens someFileName in Sublime on Mac! Like magic!! No need to mess with FTPS. Just one word of caution.. if you put the Mac to sleep, the “rsubbed” file may become disconnected from the remote, so when you make the first save after resuming work, verify that the changes are indeed saved, or close the file and reopen it from the remote.

rsub also works with Sublime Text in Windows. The only part of the above setup that differs on Windows is the SSH config since Microsoft’s effort to create a native OpenSSH port for Windows is slow going (“non-production ready pre-release v0.0.17.0” with 161 open issues as of writing of this post). I usually use the excellent commercial SSH client VanDyke’s SecureCRT as the SSH terminal in Windows. I initially thought reverse port forwarding would not be possible in it, but alas, I stand corrected! Van Dyke’s always helpful and knowledgeable technical support pointed out how to achieve the desired port forwarding in it (the config section in question was titled: “Port Forwarding – Remote/X11”, and that indeed meant “remote OR X11”, not “remote X11”, as I had read it. So regardless of whether you use PuTTY (or its derivatives like KiTTY) or SecureCRT, you setting up the port forwarding is a snap. I’ll outline below PuTTY’s setup first, then SecureCRT’s equivalent configuration.

Install and fire up PuTTY. Just to make sure you start from a clean slate, click on “Default Settings” and then “Load”:

putty-1-load-defaults

Set the name (or IP) of the server you’ll be running rsub from:

putty-2-set-server-name

If you’re not using PuTTY’s key agent Pageant to authenticate, enter the path for your private RSA key. Note that it must be in PPK format (if you have PEM format key, you need to convert it with PuTTYgen, another PuTTY utility program):

putty-3-set-key

Add the remote listener port:

putty-4-add-remote-listener-port

[OPTIONAL] If you’re NOT using this PuTTY session for the shell (i.e. if you’re using for that purpose some another program that lacks the reverse forwarding capability), disable the shell for this connection:

putty-5-do-not-start-shell

[OPTIONAL] Similarly, if you’re not using this PuTTY session for the shell, set the window size to a small value:

putty-6-set-window-size

Finally, back in the Session tab, save the session: give it a name, then click on “Save”. If this is a shell-less RSUB session only, give a descriptive name:

putty-7-save-session

Now you have configured a RSUB session in PuTTY. For convenience, you may want to create a desktop link to activate the [RSUB] session. If so, right click on the desktop and select “New > Shortcut”, then enter the path to putty.exe, followed by -load, and the name you gave the session in PuTTY:

putty-8-create-shortcut

Finally, give a descriptive name for the desktop link:

putty-9-name-shortcut

And now you have a link that opens the RSUB channel to your remote server:

putty-10-link-image

Click on it, and it opens a small session window. As long as you keep it open, you can use the rsub command on the remote to open and edit remote files on your local Sublime Text!

And now, the same for SecureCRT:

Once you have configured a profile otherwise (set the hostname, username, and authentication information – [preferably] either a PEM format key, or a password [if allowed by your server]), head to Connection > Port Forwarding > Remote/X11, like so:

rsub-scrt-1-add-remote-port-forwarding

Click on “Add”, and enter a name for this tunnel, such as “RSUB” here, and the port 52698. When you enter it in the “Remote > Port” field, the “Local > Port” is automatically filled out for you:

rsub-scrt-2-add-remote-port-forwarding

And now you have the rsub port forwarding in place in SecureCRT!

rsub-scrt-3-remote-port-forwarding-added

Now when you open the session, you automatically have a rsub port open as well, and once you open Sublime Text on Windows, you can proceed to type rsub someFileName on the server, and it opens in Sublime.

So far so good (remote editing is working great!). Today I needed to diff an old configuration file against the new one, and the CLI diff output was too tedious to decipher. Then it occurred to me that maybe it would be possible to somehow use my favorite GUI diff utility, Beyond Compare with Sublime — and it is! The only thing to note is that when you open Beyond Compare from the files open in Sublime, you’ll need to save the completed diff first in Beyond Compare, and then in Sublime. Note that the file change indicator doesn’t light up in Sublime even when it has received the changes resulting from the diff reconciliation in Beyond Compare. The changes are received in Sublime when you save them in Beyond Compare, but not saved from Sublime [to the server over rsub] until you explicitly hit save in Sublime.

Now.. the files opened in Sublime from a remote using rsub can be diffed by this method with Beyond Compare! Working with remote files just became a lot more fun! 🙂

Update 2017-11-07: The article was updated with the latest rsub installation details, and PuTTY configuration instructions were added.

Update 2017-11-09: Van Dyke’s technical support pointed out to me that the reverse port forwarding can be accomplished in SecureCRT as well, so I corrected the article, and added the configuration details for SecureCRT.

Update 2017-11-24: I just noticed you can open two files from two different servers (using rsub), or one file from a server, and one file locally, and then compare them with Beyond Compare as described above. So cool!

Update 2018-01-17: Note that if you have a connection open from multiple machines, the first one that reverse-forwards the port 52698 receives the file when you run rsub someFileName on the remote. This can be confusing if you work on same remotes from multiple systems, so if you so choose, you can map a different port from different laptops/desktops, like so:

laptop – RemoteForward 52698 127.0.0.1:52698
desktop – RemoteForward 52699 127.0.0.1:52698

(NOTE: The first port value is the forwarded remote port; the second value is the local port which always remains at 52698 as it corresponds to the Sublime’s rsub extension port set in Sublime > Preferences > Package Settings > rsub > port)

Then on the remote system set up couple of aliases, respectively (here we assume the rmate repo was cloned in /opt/rmate rather than downloaded with curl):

Shell
1
2
alias rsubl='/opt/rmate/rmate --port 52698'
alias rsubd='/opt/rmate/rmate --port 52699'

If you set up multiple rsub alternatives like this, you may not want to copy/symlink the rmate executable to /usr/local/bin/rsub as that way you have to use the the port-specific aliased commands instead.

Filed Under: Linux, macOS, Programming, Software, Technical, Windows, Workflow Tagged With: beyond compare, diff, edit, remote, sublime

Blog Author, Ville Walveranta

Information Architect, Application Developer, Web Technologist

Social

Follow me on:

StackExchange

profile for Ville on Stack Exchange, a network of free, community-driven Q&A sites

Recent Posts

  • macOS: ‘dig’ vs. ‘dscacheutil’ while using split DNS with Viscosity VPN client
  • Remove DRM Easily (?) from Your Audible Purchases
  • Exploring GitHub Flavored Markdown local preview
  • Interactive AWS CLI Query Filtering with JSONPath
  • Easy MFA and Profile Switching in AWS CLI

Tags

2fa automatic automount aws bash beyond compare boot centos co-lo co-location comparison diff DNS enforcer esxi freebsd ftp fusemail Hardware iam install key Linux mailtrust microsoft monitoring multi-factor nfs RELEASE-7.0 rotation script security self-healing shell software sublime tbe trackball ubuntu unix vista vmware Windows windows 7 workflow

Blog archive

July 2017
M T W T F S S
« Apr   Oct »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

PGP/GPG

Keybase: vwal
(PGP Key ID 2E99 86D7 7ED9 9C13)

Copyright © Ville Walveranta 2018 - All Rights Reserved · Powered by Wordpress and Genesis Framework