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://user@domain.example.com: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=
Code language: PHP (php)
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 scp.cmd
file:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\sftp\shell\open\command]
@="\"C:\\Windows\\scp.cmd\" \"%1\""
Code language: JavaScript (javascript)
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!
Leave a Reply