如何与同一家庭网络中的另一台Linux计算机共享文件夹?


43

我正在尝试与同一家庭网络上的另一台Ubuntu计算机共享一台Ubuntu计算机上的文件夹。当我右键单击该文件夹并选择“共享选项”时,它告诉我需要安装Windows网络共享服务才能共享文件夹。Windows与这有什么关系?我不是要与Windows计算机共享...

Answers:


22

Windows与这有什么关系?我不是要与Windows计算机共享...

没错,这可能会造成混淆。因此,让我首先澄清一下这些术语:

Windows共享文件和打印机的方式称为SMB。来自SAMBA项目的人员已经实现了Microsoft的所有Linux协议和规范。因此,Ubuntu支持与Windows相同类型的文件共享,即Samba。

  • 您可以使用SAMBA在Linux机器之间共享文件。实际上,如果您有一个朋友(而不是其Windows计算机),则可能更希望这样做。

  • 或者,您可以使用Linux共享文件的方式,即NFS(网络文件系统)- 上一个问题的答案解释了如何做到这一点。(但这是技术性的)

因此,当“共享选项”对话框要求您安装软件包时,实际上并没有安装任何Microsoft软件或类似的软件。继续做下去,这是绝对安全的。

附录:

您可以按照Salih Emin的说明尝试仅启用共享。如果它不起作用,您将收到一个简单的警告,然后可以根据需要执行Salih描述的步骤。我已经在全新安装和最新的系统上进行了尝试,确实需要这样做。


1
感谢您的解释。有趣的是,我正试图摆脱Microsoft,事实证明,即使Linux也使用了他们的工作。啊。
EmmyS

4
好吧,桑巴人比微软自己更好地实现了微软的协议。那里有些安慰:-)
Stefano Palazzo

8

目前,Lucid中有一个小错误,该错误已在Launchpad中列出:bug#536766。此错误不会提示用户安装完成文件共享设置所需的必要软件包。在解决此问题之前,这里有一个快速的解决方法。

您需要安装libapache2-mod-dnssd并重新启动。单击此链接进行安装,或在软件中心中找到libapache2-mod-dnssd

安装完成后,转到系统→首选项→个人文件共享,然后选中“在网络上共享公共文件”框。

替代文字

完成所有操作后,您应该就能查看网络上所有允许在“公用”文件夹中共享公用文件的其他计算机。只需单击位置→网络,您将在其中看到所有可用的计算机及其共享的公用文件夹。

双击服务器图标将在桌面上安装相关的公用文件夹。

通过链接文字


这些软件包是否与apache Web服务器相关联?我已经安装了作为LAMP堆栈一部分的apache,并且不想破坏它。
EmmyS

1
很棒的发现!(顺便说一句,我已经编辑了答案,该软件包将安装apache2.2-bin作为依赖项,这样看起来更容易)
Stefano Palazzo

1
@EmmyS,这些软件包不会破坏您的Apache安装。我正在运行这些,而且没有任何问题。
RolandiXor

我发现此链接有助于实际共享目录:itsfoss.com/share-folders-local-network-ubuntu-windows
MrMas

5

您可以简单地在linux机器上运行一个simpleHTTP服务器,然后在另一台机器上访问它。

脚步 :

  1. 首先从要共享的文件夹启动终端。
  2. 在终端中运行- python -m SimpleHTTPServer
  3. 使用检查您的IP ifconfig
  4. 在另一台机器的浏览器中输入ip地址:8000(例如:如果您的ip是127.3.4.123,则在浏览器中键入127.3.4.123:8000)

您在文件夹中获取所需的文件以进行下载。


4
下载!=分享。
EmmyS 2014年

对我来说,这是一个很好的答案,尽管对于Python3,这是python3 -m http.server
VanDavv

2

我相信这就是SAMBA软件包的内容,或者至少是其描述的一部分。另外,您可以尝试使用“偏好设置”->“文件共享”,我相信它使用了不同的机制。尽管安装了Samba是一件方便的事情。


我的印象是(显然是错误的)Samba允许Linux和Windows之间共享。我不想与Windows共享,而只希望与另一台Linux计算机共享。
EmmyS 2010年

不,你说得对。当然,两台机器都必须安装samba。
Stefano Palazzo

两台机器都需要使用SMB协议。Windows以这种方式执行此操作。Linux机器使用samba来实现。
痴呆的刺猬

2

您可以安装“ qweborf”。它将通过HTTP共享目录,其他主机将能够使用浏览器进行访问。

它还可以启用webdav并将目录作为读取/写入文件系统挂载(已通过davfs2,KDE,Gnome2,OsX测试)。


2

如果您想在Ubuntu中无缝集成,并且对Windows兼容性不感兴趣,那么SSH是您的重中之重。

请参阅如何通过LAN在两台Linux计算机之间共享文件?

您可能需要使用以下命令安装SSH服务器:

sudo apt-get install openssh-server

从客户端上的文件管理器应用程序,您可以使用以下方法访问服务器:

sftp://servername.local

要从终端或以编程方式访问文件,请使用sshfs来在客户端的文件系统中创建安装点。


通过SSH复制文件的其他编程方式包括scp和(甚至更好)rsync
nobar

2

对于纯Linux网络,我发现SSHFS是本机的,稳定的并且非常快。我有两台Xubuntu计算机(18.04)通过SSH共享/ home文件夹。

这是设置此sshfs的方法,并在重启后使用fstab自动重新连接而无需提供密码。非常感谢serverfault用户kubanczyk在远程挂起/恢复后如何重新连接。

对于要连接的计算机,我将使用“本地计算机-surfbox”,对于要连接的计算机,将使用“远程计算机-devbox”。

将下面的“ remoteuser”替换为您在远程计算机上登录的用户名,将“ localuser”替换为您在本地计算机上登录的用户名。要验证用户名echo $USER,请在远程和本地计算机上输入终端。

另外,请检查您的userID或groupID,它们都应为1000。

组ID:id -g localuser 用户ID:id -u localuser

1.获取本地和远程计算机的IP地址。

hostname -I

我将对本地计算机('surfbox')使用192.168.1.150,对远程计算机('devbox')使用192.168.1.151

2.在本地和远程计算机上安装软件包

sudo apt install sshfs fuse ssh

3.创建一个分组保险丝并向其中添加本地用户

创建组: sudo groupadd fuse

将localuser添加到组: sudo usermod -a -G fuse $user

4.在保险丝配置中启用“ allow_other”

在fstab中挂载时,我们将需要此选项

编辑/etc/fuse.conf您的命令行编辑器。之前删除#标签user_allow_other并保存。

5.在本地计算机上生成SSH密钥

提示时不要提供密码。只需按Enter键即可。

ssh-keygen -t rsa -C youremail@example.com

密钥存储在本地计算机主目录/.ssh文件夹中

6.将本地计算机的公共SSH密钥传输到远程计算机

ssh-copy-id -i ~/.ssh/id_rsa.pub remoteuser@192.168.1.151

系统将提示您输入远程计算机上远程用户的密码。现在,本地计算机公钥已添加到远程计算机上的文件〜/ .ssh / authorized_keys中。

7.在本地计算机/ mnt文件夹上创建一个目录,您将在其中装载远程计算机/ home文件夹。

选择对您的远程计算机有意义的任何名称。

sudo mkdir /mnt/devboxhome

8.从终端挂载远程机器/ home目录

sshfs的语法是

sshfs [user@]host:[directory] mountpoint [options]

我们用

sudo sshfs [remoteuser]@192.168.1.151:/home/[remoteuser] /mnt/devboxhome -o allow_other,default_permissions -o identityfile=/home/[localuser]/.ssh/id_rsa

示例:假定“ steve”是本地和远程计算机上的用户名

sudo sshfs steve@192.168.1.151:/home/steve /mnt/devboxhome -o allow_other,default_permissions -o identityfile=/home/steve/.ssh/id_rsa

由于已将公共RSA密钥转移到远程计算机,因此不会提示您输入远程用户密码。

您将得到一条警告,指出该机器不受信任,并提示是否应添加该机器。将远程计算机添加为受信任的计算机。

9.验证:浏览远程计算机/ home目录

现在,在本地计算机上的终端中,您可以在/ mnt / devboxhome下列出远程计算机/ home目录。

cd /mnt/devboxhome ls

或使用Nautilus浏览目录。大。

10.重新启动后启用重新连接

我们将在/ etc / fstab中添加一个条目以实现此目的。您将需要本地计算机用户ID或组ID-如果错过了此信息,请参阅介绍。使用命令行编辑器编辑/ etc / fstab并将这两行添加到/ etc / fstab的末尾

# Mount devbox at boot remoteuser@192.168.1.151:/home/[remoteuser]/ /mnt/devboxhome fuse.sshfs default_permissions,user,delay_connect,reconnect,serversliveinterval=15,serveralivecountmax=3,allow_other,identityfile=/home/[localuser]/.ssh/id_rsa,idmap=user,uid=1000,gid=1000 0 0

  • delay_connect使内核等待网络启动,直到它尝试在远程计算机上安装目录。
  • 由于我们在引导过程中以root用户身份运行,因此我们必须指定存储在localuser主目录中的密钥文件。
  • allow_other-进行实际挂载的用户以外的其他用户可以访问已挂载的文件系统。
  • idmap = user-仅转换连接用户的UID
  • 重新连接,ServersLiveInterval,ServerAliveCountMax -ssh发送保持活动的ping。如果ServerAliveCountMax连续的ping操作失败,请重新连接。

以史蒂夫身份登录本地和远程计算机的用户将具有:

steve@192.168.1.151:/home/steve/ /mnt/devboxhome fuse.sshfs default_permissions,user,delay_connect,reconnect,serversliveinterval=15,serveralivecountmax=3,allow_other,identityfile=/home/steve/.ssh/id_rsa,idmap=user,uid=1000,gid=1000 0 0

重要说明:远程目录后的斜杠:steve@192.168.1.151:/ home / steve /

保存/ etc / fstab并...

11.重新启动

现在,您应该能够访问本地计算机/ mnt / devboxhome中的远程计算机/ home目录。在Nautilus中,您可以将该文件夹拖到位置栏。

12.重复

在远程计算机上再次执行相同的步骤,以共享本地计算机的/ home目录。


好答案。我不知道有人可以在fstab中挂载sshfs文件系统,对此表示感谢。
有机大理石

0

我共享文件的方式:

sudo npm install -g http-server

转到您要共享的文件夹,打开终端并运行以下命令:

http-server -o 

您将能够使用该命令的输出提到的IP地址访问同一网络中所有计算机中的该文件夹。


0

zx81roadkill是正确的,请使用“ sshfs”。Samba是废话,NFS是垃圾。从我在加利福尼亚的计算机到阿根廷的计算机,Sshfs完全可用。它是完全安全的,它和其他任何东西一样快(我有一个千兆位线)。

与Samba和NFS相比,Sshfs相对较新,但是远远优于这两个。这是一个运行它的示例(假设您已经安装了所有软件包)

# mount "username"'s home directory on "machine"
  mkdir -p /tmp/my_mount ; sshfs username@machine: /tmp/my_mount
# mount the root directory on "machine" (note: if "username" on "machine"
# can't write to the file, neither will you.  You have "username"'s privs
  mkdir -p /tmp/my_mount ; sshfs username@machine:/ /tmp/my_mount
# mount the directory "Videos" on "username"'s account on "machine"
  mkdir -p /tmp/my_mount ; sshfs username@machine:Videos /tmp/my_mount

输入密码后,/ tmp / my_mount将包含“计算机”上“用户名”的所有文件。不要为Samba或NFS烦恼。它们只是配置或设置过程中毫无意义的痛苦。

卸载:

fusermount -u /tmp/my_mount

如果失败(出于任何原因):

umount -f /tmp/my_mount

通过安装点发送的所有数据均已加密。为什么这不是在远程机器上进行挂载的标准方法,却不是完全可以接受的方法,这对我来说还是个谜。就简单性而言,它远远优于其他任何方法。

如果您需要原始速度,那that肿的垃圾Samba可能会做到这一点,或者是NFS。我不知道,100 MB / s +对我而言已经足够了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.