Skip to content

How to use sshfs under windows to mount a filesystem via a BastionHost/JumpHost

Today, I had the "joy" to work on a linux machine and edit a lot of files. The problem is, I had to use a Windows 10 as host OS.
Furthermore, the remote machine was available only via a bastion host/jump host. So it took me some time to make this possible.

I was not able to make sshfs-win working. WinSCP is a fallback option but this would result in edit a file -> save a file -> upload a file. I wanted to avoid the step upload a file.

What comes after this line is a snapshot of my created howto. I hope it will save you some time. It took me a lot to figure it out.

Given is, that you need to mount a filesystem via sshfs.

Following up, I will provide a guide how to do this by using a Windows 10 machine.

Bonus task, we are using a jumphost.

Steps

1.) Ensure you are running wsl2

  • wsl1 does not have a working fuse
  • Open a powershell and run wsl --list --verbose
  • If the VERSION says something bigger 1, you are fine
  • Else
    • Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    • Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
    • Download wsl_update_x64.msi from https://aka.ms/wsl2kernel
    • Install the msi
    • wsl --set-version <string: Distro like Debian> 2
    • Wait
    • wsl --list --verbose should output something like 2 in column VERSION

2.) Ensure you've sshfs installed

  • Open the shell to your wsl linux
  • test -f /usr/bin/sshfs && echo "sshfs already installed" || sudo apt install sshfs -y

3.) Configure your ssh

  • Open the shell to your wsl linux
  • test -d ~/.ssh || mkdir ~/.ssh;
  • Add content like the following in your ~/.ssh/config file
  • sudo bash -c "echo '#enable option' >> /etc/fuse.conf"
  • sudo bash -c "echo 'user_allow_other' >> /etc/fuse.conf"

Example content of the ssh config file

HOST my.main.host-username
  HostName my.main.host
  ProxyJump my.bastion.host-username
  User username
  #optional but recommended
  IdentityFile ~/.ssh/my_private_key

HOST my.bastion.host-username
  HostName my.bastion.host
  User username
  #optional but recommended
  IdentityFile ~/.ssh/my_private_key

4.) Mount and umount the filesystem

  • You can add the following lines to your alias
  • Assumed is, that the path ~/network/host.main.my exists
  • ssh my.main.host-username
  • id -a
  • exit
  • Not down the number for uid and gid
    • Example:
    • For the output uid=1337(artodeto) gid=4711(bazzline) groups=...
    • uid is 1337
    • gid is 4711
  • mount: sshfs -o ProxyJump=my.bastion.host-username,allow_other,uid=<int: number>,gid=<int: number> my.main.host-username:/my/path ~/network/host.main.my

howto - mount filesystem via ssh using sshfs

First of all, you have to install "sshfs". After that you just have to type.

sshfs $user@$host:/path/to/dir /path/to/mount
If fuse throws an error of permission, you have to add your user to the group fuse by typing:
usermod -a -G fuse $user
After you re-logged-in you can see by typing "groups" in your shell that everything is done fin. Do not want to logoff? Try
su $user
in your shell. This is a new login and so your new group is available now. Just another hint, if you want to access symbolic links, try:
-o follow_symlinks
and/or
-o transform_symlinks
The man page will help you to understand what you are doing. Now put everything as an alias in your bashrc (or something similar) and you are done :-).
alias mountMyShare="sshfs $user@host:/path/to/dir /path/to/mount -o follow_symlinks"; alias umountMyShare="fusermount -u /path/to/mount";
Happy mounting and unmounting.