105

I've got a question that I've not been able to find an answer for. I have two computers, both of which run Ubuntu Linux 12.04. I have set up my first computer ("home") to be able to SSH into my second computer ("remote") using public/private RSA key authentication.

This is not the first SSH connection that have set up using key authentication on my home computer, so my home computer has several id_rsa private keyfiles (each of which is for a different computer to SSH into). Thus, I am able to successfully SSH only when I specify a keyfile (in ssh, the -i option), using ssh username@ipaddress -i path/to/keyfile/id_rsa.2.

That works great. However, I would also like to use sshfs, which mounts the remote filesystem. While ssh seems to play nice with multiple keys, I can't find a way to get sshfs to use the correct private key ("id_rsa.2").

Is there a way to get sshfs to do this?

J L
  • 1,183

5 Answers5

157

Here's what works for me:

sshfs me@x.x.x.x:/remote/path /local/path/ -o IdentityFile=/path/to/key

You can figure this out via man sshfs:

-o SSHOPT=VAL ssh options (see man ssh_config)

man ssh_config

IdentityFile

Specifies a file from which the user's DSA, ECDSA or DSA authentication identity is read.

goldilocks
  • 87,661
  • 30
  • 204
  • 262
  • 1
    This command does not work on macOS Sierra – basZero Dec 22 '17 at 10:07
  • 5
    IdentityFile path note. If running sshfs with sudo, using ~ in the IdentityFile path refers to root's home, which may not be where the RSA file is. Use something like /Users/<username>/.ssh instead. – RavenMan Jun 06 '18 at 21:41
  • 5
    Caveats: IdentityFile= must be an absolute path not a relative path. I learned this today. – SurpriseDog Jul 13 '20 at 01:02
  • @goldilocks Thanks for describing the way how did you figured it out. Reading man files is sometimes a bit tricky for me - I do not read them I just search them and this particular note was not matched by my search at all ;) – ino May 21 '21 at 07:27
  • 1
    @ino You can use regular expressions in the man pager forward slash (/) search (actually the pager is less by default). They seem to be PCRE style too (the style used in most modern programming languages); man less just says "the regular expression library supplied by your system. I use^\s+-xa lot, which will find lines starting with some space then-x, so good for searching long lists of options. You can also useman -Hto format it as html and send it to$BROWSER` if available, sometimes easier to read. – goldilocks May 21 '21 at 15:16
32

What you need to do is specify which private key to use in the ~/.ssh/config file. for example:

Host server1.nixcraft.com
    IdentityFile ~/backups/.ssh/id_dsa
Host server2.nixcraft.com
    IdentityFile /backup/home/userName/.ssh/id_rsa
jalanb
  • 588
  • 1
    Thanks so much! @Steven You, I didn't realize that sshfs reads .ssh/config files (though I do see now that I missed a similar answer from someone's previous post, at http://stackoverflow.com/a/13638806/1940466). That's excellent to know.

    For what it's worth, I would like to accept both your and @goldilocks' answers, but I'm not able to. I also don't have enough reputation to vote up your answer. I very much appreciate the answer, though!

    – J L Jan 17 '13 at 04:08
8
sshfs -o ssh_command='ssh -i path/to/keyfile/id_rsa.2' username@ipaddress:/path /local/path
4

Adding to the solution proposed by @Steven You, a simple solution is :

  1. go to ~/.ssh/config
Host <nick name>
    HostName  <ipaddress>
    User <username>
    PubKeyAuthentication yes
    IdentityFile <path/to/keyfile/id_rsa.2>
  1. sshfs -p 22 <nick name>:source/file/on/server local/folder/
0

From a live server.

Type this (with your modifications) in the shell (command line)

sudo sshfs -o allow_other,default_permissions,IdentityFile=/home/osmc/.ssh/id_rsa pi@192.168.50.71:/home/pi/torrents/rtorrent /mnt/server/

If you want it to come up during a reboot then edit /etc/fstab

sudo nano /etc/fstab pi@192.168.50.71:/home/pi/torrents/rtorrent /mnt/server fuse.sshfs delay_connect,rw,nosuid,nodev,default_permissions,allow_other,IdentityFile=/home/osmc/.ssh/id_rsa 0 0

Note the added delay_connect option for the /etc/fstab entry.

Also note that the id_rsa file is generated without a password.

Also note that this mount is first mounted manually to get the ssh fingerprint added to /home/osmc/.ssh/known_host