web-dev-qa-db-ja.com

sshfsのキーファイルを指定するにはどうすればよいですか?

sshfs --helpを見ましたが、キーファイルについては何も言及されていません。コンピューターに複数のpub/privキーペア(異なるサーバー用)があり、使用するキーを指定したいと思います。どうすればよいですか?

  usage: sshfs [user@]Host:[dir] mountpoint [options]

  general options:
  -o opt,[opt...]        mount options
  -h   --help            print help
  -V   --version         print version

  SSHFS options:
  -p PORT                equivalent to '-o port=PORT'
  -C                     equivalent to '-o compression=yes'
  -F ssh_configfile      specifies alternative ssh configuration file
  -1                     equivalent to '-o ssh_protocol=1'
  -o reconnect           reconnect to server
  -o delay_connect       delay connection to server
  -o sshfs_sync          synchronous writes
  -o no_readahead        synchronous reads (no speculative readahead)
  -o sshfs_debug         print some debugging information
  -o cache=BOOL          enable caching {yes,no} (default: yes)
  -o cache_timeout=N     sets timeout for caches in seconds (default: 20)
  -o cache_X_timeout=N   sets timeout for {stat,dir,link} cache
  -o workaround=LIST     colon separated list of workarounds
      none             no workarounds enabled
      all              all workarounds enabled
      [no]rename       fix renaming to existing file (default: off)
      [no]nodelaysrv   set nodelay tcp flag in sshd (default: off)
      [no]truncate     fix truncate for old servers (default: off)
      [no]buflimit     fix buffer fillup bug in server (default: on)
  -o idmap=TYPE          user/group ID mapping, possible types are:
      none             no translation of the ID space (default)
      user             only translate UID of connecting user
  -o ssh_command=CMD     execute CMD instead of 'ssh'
  -o ssh_protocol=N      ssh protocol to use (default: 2)
  -o sftp_server=SERV    path to sftp server or subsystem (default: sftp)
  -o directport=PORT     directly connect to PORT bypassing ssh
  -o transform_symlinks  transform absolute symlinks to relative
  -o follow_symlinks     follow symlinks on the server
  -o no_check_root       don't check for existence of 'dir' on server
  -o password_stdin      read password from stdin (only for pam_mount!)
  -o SSHOPT=VAL          ssh options (see man ssh_config)

  Fuse options:
  -d   -o debug          enable debug output (implies -f)
  -f                     foreground operation
  -s                     disable multi-threaded operation

  -o allow_other         allow access to other users
  -o allow_root          allow access to root
  -o nonempty            allow mounts over non-empty file/dir
  -o default_permissions enable permission checking by kernel
  -o fsname=NAME         set filesystem name
  -o subtype=NAME        set filesystem type
  -o large_read          issue large read requests (2.4 only)
  -o max_read=N          set maximum size of read requests

  -o hard_remove         immediate removal (don't hide files)
  -o use_ino             let filesystem set inode numbers
  -o readdir_ino         try to fill in d_ino in readdir
  -o direct_io           use direct I/O
  -o kernel_cache        cache files in kernel
  -o [no]auto_cache      enable caching based on modification times (off)
  -o umask=M             set file permissions (octal)
  -o uid=N               set file owner
  -o gid=N               set file group
  -o entry_timeout=T     cache timeout for names (1.0s)
  -o negative_timeout=T  cache timeout for deleted names (0.0s)
  -o attr_timeout=T      cache timeout for attributes (1.0s)
  -o ac_attr_timeout=T   auto cache timeout for attributes (attr_timeout)
  -o intr                allow requests to be interrupted
  -o intr_signal=NUM     signal to send on interrupt (10)
  -o modules=M1[:M2...]  names of modules to Push onto filesystem stack

  -o max_write=N         set maximum size of write requests
  -o max_readahead=N     set maximum readahead
  -o async_read          perform reads asynchronously (default)
  -o sync_read           perform reads synchronously
  -o atomic_o_trunc      enable atomic open+truncate support
  -o big_writes          enable larger than 4kB writes
  -o no_remote_lock      disable remote file locking

  Module options:

  [subdir]
  -o subdir=DIR           prepend this directory to all paths (mandatory)
  -o [no]rellinks         transform absolute symlinks to relative

  [iconv]
  -o from_code=CHARSET   original encoding of file names (default: UTF-8)
  -o to_code=CHARSET      new encoding of the file names (default: UTF-8)
11
Don Rhummy

このオプションに注意してください:

-o SSHOPT = VAL sshオプション(man ssh_configを参照)

また、man ssh_configを見ると、IdentityFileという秘密鍵ファイルへのパスを設定するオプションがあるため、次のことができます。

sshfs -oIdentityFile=/abs/path/to/id_rsa server: path/to/mnt/point

IDファイルへのパスは絶対パスである必要があります。

21
janos

原則として、次のように機能します(rootとして、またはSudoを使用):sshfs -o default_permissions,nonempty,IdentityFile=/home/USER/.ssh/id_rsa SRVUSER@SERVER:PATH /mnt/mountpoint

USERをサーバーのauthorized_keysファイルにあるユーザーに、SERVERをサーバー名(または192.168.0.11などのIP)に置き換えます。SRVUSERサーバー上のユーザーと一緒に(たとえば、root。これは推奨されませんが、可能であり、必要な場合もあります。これに対して、サーバー上で/etc/ssh/sshd_configを正しく設定します。つまり、ディレクティブPermitRootLoginおよびPasswordAuthentication) 。また、それに応じて/mnt/mountpointに置き換えます。

オプション-o nonemptyを使用すると、このディレクトリが空でない場合に/ mnt/mountpointをマウントできます。ファイル.unmountedをこのディレクトリに保持してマウントされているかどうかを確認するため、これを使用する必要があります。したがって、test -e /mnt/mountpoint/.unmountedが正常に返される場合(つまり、ファイル.unmountが/ mnt/mountpointに存在する場合)、マウントされていません。

実際の例:

  • サーバー名「ホームサーバー」
  • サーバーに/ homeディレクトリをマウントします
  • ローカルシステムのマウントポイントは/ mnt/homeserverです
  • ユーザー「steve」は秘密鍵を持っています

ssh root@homeserver as user steve worked。

sshfs -o default_permissions,nonempty,IdentityFile=/home/steve/.ssh/id_rsa root@homeserver:/home /mnt/homeserver(rootとして)

これは機能しませんでした、エラーメッセージが表示されました:read: Connection reset by peer

Solution:-o debugを追加して、より詳細な出力を取得します。

# sshfs -o default_permissions,nonempty,IdentityFile=/home/steve/.ssh/id_rsa,debug 
root@homeserver:/home /mnt/homeserver
Fuse library version: 2.9.8
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE Host IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a Host key has just been changed.
The fingerprint for the ECDSA key sent by the remote Host is
SHA256:aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStT0123
Please contact your system administrator.
Add correct Host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:2
ECDSA Host key for homeserver has changed and you have requested strict checking.
Host key verification failed.
read: Connection reset by peer

そして突然、修正がはるかに簡単になりました。 sshdキーは前回のセッション以降に再作成されましたが、ローカルシステムの/root/.ssh/known_hostsにはまだ古いキーが残っているため、機能しません。私の場合の解決策は、エディター(homeserverなど)を使用して、nanoで始まる行を/root/.ssh/known_hostsから削除することでした。これで、sshfsを使用したマウントが機能します。最初のマウントで、新しいキーを確認する必要があります。

# mount /mnt/homeserver
The authenticity of Host 'homeserver (192.168.0.11)' can't be established.
ECDSA key fingerprint is SHA256:aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsS/1234.
Are you sure you want to continue connecting (yes/no)? yes

ところで、これは/etc/fstabの行です。

root@homeserver:/home  /mnt/homeserver  Fuse.sshfs noauto,nonempty,default_permissions,IdentityFile=/home/steve/.ssh/id_rsa  0 0

したがって、それが他のものであっても、最初に-o debugを試してください。障害を見つけるのに非常に役立ちます。

1
luttztfz