V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
hellojammy
V2EX  ›  Linux

使用 sshfs 挂载远程服务器目录

  •  
  •   hellojammy ·
    hellojammy · 2016-12-06 18:28:59 +08:00 · 2263 次点击
    这是一个创建于 2944 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务器日志查看,是开发人员和服务器运维人员在工作中经常会遇到的一件事情,只有一台服务器时,比较好办,直接登录服务器使用tail -f file-path 命令就可以实时查看到日志文件的输出。当有负载的需要,服务器多了之后,就会比较麻烦,为了查找一个问题的日志可能需要登录多台服务器。今天给大家介绍一种借助 sshfs ,非常简单的日志文件挂载方案,可以方便大家查看服务器日志文件。

    sshfs 介绍

    sshfs是基于 fuse 构建的 ssh 文件系统客户端程序,通过它远程主机的配置无需作任何改变,就可以透过 SSH 协议来挂载远程文件系统了,非常方便及安全。

    sshfs 的安装,在 centOS 中的安装命令如下:

    yum -y install sshfs
    

    挂载

    sshfs 的远程文件挂载,需要结合 ssh 免密码登录一起实施。假设现在有 A 、 B 、 C 三台服务器的日志,需要挂载到 D 服务器。首先需要将 D 服务器的公钥写入 A 、 B 、 C 三台服务器。配置方法参见我之前的文章

    把远程服务器的 /mydata/logs/目录下的所有文件,挂载到 D 服务器,在 D 服务器的/mydata/logs/目录下为每个服务器建一个目录。( ip_address_A 代表 A 服务器的 ip 地址,需要自行替换)

    //把 A 服务器的 /mydata/logs/ 目录 挂载到 D 服务器的 /mydata/logs/A/ 目录
    
    sshfs root@ip_address_A:/mydata/logs/ /mydata/logs/A/
    

    其他两台服务器的挂载方法一样。挂载成功后,可以使用 mount 命令查看挂载情况:

    mount -l
    

    可以看到挂载的情况:

    root@ip_address_A:/mydata/logs/on /mydata/logs/A type fuse.sshfs (rw,nosuid,nodev)
    
    root@ip_address_B:/mydata/logs/on /mydata/logs/B type fuse.sshfs (rw,nosuid,nodev)
    
    root@ip_address_C:/mydata/logs/on /mydata/logs/C type fuse.sshfs (rw,nosuid,nodev)
    

    也可以使用df -h命令查看磁盘的挂载情况。另外,想要开机自动挂载目录,可以编辑/etc/fstab文件,加入以下几行:

    sshfs#root@ip_address_A:/mydata/logs/ /mydata/logs/A fuse defaults,auto,allow_other 0 0
    
    sshfs#root@ip_address_B:/mydata/logs/ /mydata/logs/B fuse defaults,auto,allow_other 0 0
    
    sshfs#root@ip_address_C:/mydata/logs/ /mydata/logs/C fuse defaults,auto,allow_other 0 0
    

    其中,allow_other参数代表该设置对其他用户也生效。也必须先把 ssh 自动登录配置好了,让 root 用户能够使用 root 身份登录远程主机。配置方法参见我之前的文章

    挂载成功后,就可以在服务器 D 直接查看所有服务器的日志了,在 D 服务器的/mydata/logs/目录输入以下命令。(假设 A 、 B 、 C 三台服务器的/mydata/logs/目录下都有 log.txt 这个文件)

    tail -f */log.txt
    

    日志的输出中,会标出日志是在哪台服务器的,例如:

    ==> A/log.txt <==
    get log message from A
    

    假如只想查看日志中包含关键字 a b c的日志,可以这样查看

     tail -f */log.txt | grep 'a b c'
    

    日志的输出会有一定的延时。 需要注意的是,取消挂载时,不要直接删除挂载目录,请使用以下命令取消挂载:

    fusermount -u /mydata/logs/A
    

    或者直接使用umount命令取消挂载。


    点击访问原文 您还可以加入全栈技术交流群( QQ 群号: 254842154 )


    5 条回复    2016-12-07 13:14:06 +08:00
    xiaoz
        1
    xiaoz  
       2016-12-06 23:10:11 +08:00 via iPhone
    和 nfs 挂载有何不同?
    hellojammy
        2
    hellojammy  
    OP
       2016-12-07 09:26:28 +08:00
    本质上是一样的,但是这种挂载方式更便捷
    jyf007
        3
    jyf007  
       2016-12-07 13:04:41 +08:00 via Android
    @xiaoz 一种是 sun rpc 调用,另外一种是 telnet/uucp over ask/tls
    jyf007
        4
    jyf007  
       2016-12-07 13:05:56 +08:00 via Android
    ask->ssl
    jyf007
        5
    jyf007  
       2016-12-07 13:14:06 +08:00 via Android
    另外我这段时间专门研究了 dropbear 在 redhat/debian 上的打包,成果是两套 dropbear{,multi}(自备用)和备用 ssh 服务,还看到 dropbear 的 debian 包绕过配置文件,直接定义 sftp-server 子服务路径。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:12 · PVG 00:12 · LAX 08:12 · JFK 11:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.