diff --git a/contrib/plinkfs b/contrib/plinkfs new file mode 100755 index 00000000..e4b45800 --- /dev/null +++ b/contrib/plinkfs @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +# Wrapper around the FUSE 'sshfs' client, which arranges to use Plink +# as the SSH transport subcommand. +# +# This is not totally trivial because sshfs assumes slightly more of +# OpenSSH's command-line syntax than Plink supports. So we actually +# give sshfs a subcommand which is this script itself, re-invoked with +# the --helper option. + +import sys +import os +import shlex + +if sys.argv[1:2] == ["--helper"]: + # Helper mode. Strip OpenSSH-specific '-o' options from the + # command line, and invoke Plink. + plink_command = ["plink"] + + it = iter(sys.argv) + next(it) # discard command name + next(it) # discard --helper + + for arg in it: + if arg == "-o": + next(it) # discard -o option + elif arg.startswith("-o"): + pass + else: + plink_command.append(arg) + + os.execvp(plink_command[0], plink_command) + +else: + # Normal mode, invoked by the user. + sshfs_command = [ + "sshfs", "-o", "ssh_command={} --helper".format( + os.path.realpath(__file__)) + ] + sys.argv[1:] + + os.execvp(sshfs_command[0], sshfs_command)