100

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,133
  • 2
  • 8
  • 8

4 Answers4

150

Here's what works for me:

sshfs [email protected]:/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
  • 86,451
  • 30
  • 200
  • 258
  • 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//.ssh` instead. – RavenMan Jun 06 '18 at 21:41
  • 4
    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+-x` a lot, which will find lines starting with some space then `-x`, so good for searching long lists of options. You can also use `man -H` to 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
  • 578
  • 4
  • 15
Steven You
  • 420
  • 3
  • 5
  • 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
7
sshfs -o ssh_command='ssh -i path/to/keyfile/id_rsa.2' username@ipaddress:/path /local/path
user278801
  • 171
  • 1
  • 2
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/