One of the tasks that I have to do often at work is copying data to and from an SFTP directory. Previously I had a constant domain and port that I was able to connect to, an I could save this in a WinSCP profile for ease of use. Due to some recent architectural changes though, we’re now dynamically generating IPs and ports to connect to, which caused a bit of a headache. Luckily though, we do get a really nice
sftp://firstname.lastname@example.org:1234 URI that gives us this information, and some terminal clients even allow you to click it (ConEmu).
Unfortunately, I can’t just register WinSCP as the default handler for
sftp URIs because I needed to provide other data, such as a private key and proxy information.
To fix this, I created a wrapper, poorly named
scp.cmd that does all of this work:
@echo off :: Set some necessary path variables. :: I would recommend WinSCP Portable, but that's just me. set WINSCP_PATH="C:\Path To\winscp.exe" set PRIVKEY_PPK="C:\Path To\Private Key.ppk" :: Run the actual SCP command. %WINSCP_PATH% %1 /privatekey=%PRIVKEY_PPK% /rawsettings ProxyMethod=2 ProxyHost="127.0.0.1" ProxyPort=8080 :: Unset the variables now that we don't need them. set WINSCP_PATH= set PRIVKEY_PPK=
From here I can create a Windows Registry file (or manually do it with
regedit.exe but that’s crazy) to register the
sftp URI handler and point it to my
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\sftp\shell\open\command] @="\"C:\\Windows\\scp.cmd\" \"%1\""
Now I can easily click on
sftp links for work, I can paste them into the Windows Run dialog, or even open them via the command line with
start. This is a wonderful time saver!