在 Mac OS X 上为本地文件夹挂载 SSHFS 以在 Ubuntu AWS 实例上编辑文件

lol*_*ter 5 macos ssh ubuntu fuse sshfs

我希望能够使用一个不错的 IDE 在本地编辑文件,并将本地计算机 ( ~/Code/myproject) 上的文件立即推送到云中的 Ubuntu 计算机 ( /home/ubuntu/myproject)。

我为我的 Mac OS X 笔记本电脑(本地)安装了FUSE 和 SSHFS 。

我在 EC2 上有一个 Ubuntu 16.04 AWS 实例:

ubuntu@ip-xxxxxx:~$ uname -a
Linux ip-xxxxxx 4.4.0-1017-aws #26-Ubuntu SMP Fri Apr 28 19:48:19 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-xxxxxxx:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.2 LTS
Release:    16.04
Codename:   xenial
Run Code Online (Sandbox Code Playgroud)

我使用一个.pem文件通过 SSH 进入带有该-i标志的盒子(尚未设置authorized_keys)。

这是我在本地计算机上执行的操作:

$ mount  # check for mounted
/dev/disk1 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)

$ sudo sshfs -o allow_other,defer_permissions,IdentityFile=~/.ssh/aws.pem,loglevel=debug \
    ubuntu@ec2-xxxxxxxx.compute-1.amazonaws.com:/home/ubuntu/myproject \
    /Users/me/Code/myproject
Run Code Online (Sandbox Code Playgroud)

它提示我输入本地计算机密码,然后我看到以下内容:

Password:
remote host has disconnected
Run Code Online (Sandbox Code Playgroud)

显然,有些事情已经发生了:

$ mount
/dev/disk1 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
ubuntu@ec2-xxxxxxx.compute-1.amazonaws.com:/home/ubuntu/myproject on /Users/me/Code/myproject (osxfuse, synchronous)
Run Code Online (Sandbox Code Playgroud)

如果我sshfs再次尝试与上面相同的命令(不带unmoun-ting),我会得到一个不同的错误:

mount_osxfuse: mount point /Users/me/Code/myproject is itself on a OSXFUSE volume
Run Code Online (Sandbox Code Playgroud)

我可以卸载并重试,sudo diskutil umount force /Users/me/Code/myproject/但当我重试时,我收到相同的原始错误。

我认为这可能是我的远程服务器的 SFTP 的问题,所以我找到了sftp-server远程盒子上的所有位置:

$ sudo find / | grep sftp-server
...
/usr/lib/sftp-server
/usr/lib/openssh/sftp-server
Run Code Online (Sandbox Code Playgroud)

然后我尝试在我的/etc/ssh/sshd_config文件中使用以下行:

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp /usr/lib/sftp-server
Run Code Online (Sandbox Code Playgroud)

但重启后这两种配置似乎都不起作用。

我可以使用以下命令通过 SFTP 登录:

$ sftp -i ~/.ssh/aws.pem ubuntu@ec2-xxx.compute-1.amazonaws.com
Connected to ec2-xxx.compute-1.amazonaws.com.
sftp>
Run Code Online (Sandbox Code Playgroud)

编辑:运行debug3日志级别给出相对相同的结果:

$ sudo sshfs -o allow_other,defer_permissions,IdentityFile=~/.ssh/aws.pem,loglevel=debug3 ubuntu@ec2-xxxx.compute-1.amazonaws.com:/home/ubuntu/myproject /Users/me/Code/myproject
sudo: cannot get working directory
The authenticity of host 'ec2-xxx.compute-1.amazonaws.com (xx.xx.xx.xx)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
remote host has disconnected
Run Code Online (Sandbox Code Playgroud)

关于如何修复/问题可能出在哪里有什么想法吗?

Jak*_*uje 3

您正在运行sshfsunder ,这与以您的用户sudo身份运行 有所不同,因为无法找到您的身份验证密钥:sftproot

IdentityFile=~/.ssh/aws.pem
Run Code Online (Sandbox Code Playgroud)

扩展为用户 ( /home/your-user/.ssh/aws.pem) 的主目录,但扩展为用户 ( ) 的root主目录,而该文件显然不是。sudo/root/.ssh/aws.pem

使用 PEM 文件的完整路径,例如

IdentityFile=/home/your-user/.ssh/aws.pem`
Run Code Online (Sandbox Code Playgroud)