• Linux之远程挂载SSHFS


      SSHFS(Secure SHell FileSystem)是一个客户端,可以让我们通过 SSH 文件传输协议(SFTP)挂载远程的文件系统并且在本地机器上和远程的目录和文件进行交互。

    SFTP 是一种通过 SSH 协议提供文件访问、文件传输和文件管理功能的安全文件传输协议。因为 SSH 在网络中从一台电脑到另一台电脑传输文件的时候使用数据加密通道,并且 SSHFS 内置在 FUSE(用户空间的文件系统)内核模块,允许任何非特权用户在不修改内核代码的情况下创建他们自己的文件系统。

    1.安装SSHFS

    # yum install sshfs
    
    # dnf install sshfs              【在 Fedora 22+ 发行版上】
    
    # sudo apt-get install sshfs     【基于 Debian/Ubuntu 的系统】

    2.创建SSHFS挂载目录

    # mkdir /mnt/tecmint
    $ sudo mkdir /mnt/tecmint     【基于 Debian/Ubuntu 的系统】

    3.挂载

    当你已经创建你的挂载点目录之后,现在使用 root 用户运行下面的命令行,在 /mnt/tecmint 目录下挂载远程的文件系统。视你的情况挂载目录可以是任何目录。

    下面的命令行将会在本地的 /mnt/tecmint 目录下挂载一个叫远程的一个 /home/tecmint 目录。(不要忘了使用你的 IP 地址和挂载点替换 x.x.x.x)。

    # sshfs tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint
    $ sudo sshfs -o allow_other tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint     
     【基于 Debian/Ubuntu 的系统】

    如果端口不是默认的22,则需要指定端口
    -p 22000
    $ sudo sshfs -o allow_other -p 22000 tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint   

    如果你的 Linux 服务器配置为基于 SSH 密钥授权,那么你将需要使用如下所示的命令行指定你的公共密钥的路径。

    # sshfs -o IdentityFile=~/.ssh/id_rsa tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint
    $ sudo sshfs -o allow_other,IdentityFile=~/.ssh/id_rsa tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint     【基于 Debian/Ubuntu 的系统】

    4.验证挂载是否成功

    如果你已经成功的运行了上面的命令并且没有任何错误,你将会看到挂载在 /mnt/tecmint 目录下的远程的文件和目录的列表

    5.使用df -hT检查挂载点

    # df -hT
    
    将会显示远程文件系统的挂载点

    6.永久挂载远程文件系统

    为了永久的挂载远程的文件系统,你需要修改一个叫 /etc/fstab 的文件。照着做,使用你最喜欢的编辑器打开文件

    # vi /etc/fstab
    $ sudo vi /etc/fstab     【基于 Debian/Ubuntu 的系统】   

    移动到文件的底部并且添加下面的一行,保存文件并退出。下面条目表示使用默认的设置挂载远程的文件系统。

    sshfs#tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint fuse.sshfs defaults 0 0

    如果你的服务器配置为基于 SSH 密钥的认证方式,请加入如下行:

    sshfs#tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint fuse.sshfs IdentityFile=~/.ssh/id_rsa defaults 0 0

    接下来,你需要更新 fstab 文件使修改生效。

    # mount -a
    $ sudo mount -a   【基于 Debian/Ubuntu 的系统

    7.卸载远程的文件系统

    # umount /mnt/tecmint

    如果想要使用密钥登录:

      1.在挂载机上生成密钥对

    ssh-keygen -t rsa

      2.将公钥复制到服务器上

    ssh-copy-id -i ~/.ssh/id_rsa.pub  root@xx.xx.xx.xx

      3.验证

    ssh root@xx.xx.xx.xx

    添加开机自自动挂载:

    [root@mgr03 ~]# cat /usr/lib/systemd/system/sshfs-diankezk.service
    [Unit]
    Description=SSHFS MOUNT mgr02 10.0.0.7
    After=sshd.service
    
    [Service]
    Type=forking
    ExecStart=/usr/bin/sshfs 10.0.0.7:/data1 /mnt -o reconnect -o cache=yes -o allow_other
    ExecStop=/usr/bin/umount /mnt
    
    [Install]
    WantedBy=multi-user.target

    开启:

    systemctl enable sshfs-diankezk.service 

    常见问题:

       1.目标服务器升级重启之后, 日志挂载失效

       解决方案:

    1.卸载之前的挂载
    umount   file_dir
    
    2. 重新挂载还是错误read: Connection reset by peer
    使用调试模式 查看错误信息
    sshfs  -o reconnect  111.1.11.111:/opt/logs      /data/logs -o debug -o sshfs_debug
    -o debug
    -o sshfs_debug
    
    原来是证书发生了变化 ,需要更新证书
    
    删除老的证书:
    ssh-keygen -f "/root/.ssh/known_hosts" -R 111.11.11.111
    或者直接在文件中找到该ip地址删除即可
    
    然后使用挂载命令重新挂载即可, 然后重新输入命令

      2.安装sshfs报没有可用的安装包

    原因: 默认源没有该工具, 需要先安装epel源

    yum install -y epel-release
    
    yum install -y sshfs
    
    
    
    #yum -y install fuse-sshfs
  • 相关阅读:
    centos8 将SSSD配置为使用LDAP并要求TLS身份验证
    Centos8 搭建 kafka2.8 .net5 简单使用kafka
    .net core 3.1 ActionFilter 拦截器 偶然 OnActionExecuting 中HttpContext.Session.Id 为空字符串 的问题
    Springboot根据不同环境加载对应的配置
    VMware Workstation12 安装 Centos8.3
    .net core json配置文件小结
    springboot mybatisplus createtime和updatetime自动填充
    .net core autofac依赖注入简洁版
    .Net Core 使用 redis 存储 session
    .Net Core 接入 RocketMQ
  • 原文地址:https://www.cnblogs.com/xingxia/p/linux_sshfs.html
Copyright © 2020-2023  润新知