使用NAS盒作为24/7文件服务器,我想使用sshfs从Ubuntu 9.04桌面连接到它.目前,我在桌面的fstab中有这一行:
sshfs#jldugger@storage:/mnt/HD_a2/    /mnt/storage    fuse   comment=sshfs,auto,users,exec,uid=1000,gid=1000,allow_other,reconnect,transform_symlinks,BatchMode=yes,fsname=sshfs#jldugger@storage/mnt/HD_a2/ 0 0

我可以确认它适用于mount / mnt / storage.我需要的是在启动时安装它的一些方法,但是在建立网络连接之后.

目前,Ubuntu中的Upstart不会生成网络事件.相反,它调用传统的sysvinit.默认情况下,NetworkManager已安装并正在运行;它包含一个运行部件调度程序(/etc/NetworkManager/dispatcher.d/),它本身只依赖于ifupdown的运行部件调度程序(/etc/network/*.d/),而不是将网络事件发送到upstart.特别是你关心/etc/network/if-up.d/和/etc/network/if-down.d/

首先设置一个未加密的ssh密钥对,这样你就可以在没有提示的情况下挂载这个点.编写脚本,将其放在/etc/network/if-up.d/中并生成可执行文件.在UbuntuForums上发现了以下内容,对我来说足够了:

#!/bin/sh
## http://ubuntuforums.org/showthread.PHP?t=430312
## The script will attempt to mount any fstab entry with an option
## "...,comment=$SELECTED_STRING,..."
## Use this to select specific sshfs mounts rather than all of them.
SELECTED_STRING="sshfs"

# Not for loopback
[ "$IFACE" != "lo" ] || exit 0

## define a number of useful functions

## returns true if input contains nothing but the digits 0-9,false otherwise
## so realy,more like isa_positive_integer 
isa_number () {
    ! echo $1 | egrep -q '[^0-9]'
    return $?
}

## returns true if the given uid or username is that of the current user
am_i () {
        [ "$1" = "`id -u`" ] || [ "$1" = "`id -un`" ]
}

## takes a username or uid and finds it in /etc/passwd
## echoes the name and returns true on success
## echoes nothing and returns false on failure 
user_from_uid () {
    if isa_number "$1"
    then
                # look for the corresponding name in /etc/passwd
        local IFS=":"
        while read name x uid the_rest
        do
                if [ "$1" = "$uid" ]
                        then 
                                echo "$name"
                                return 0
                        fi
        done </etc/passwd
    else
        # look for the username in /etc/passwd
        if grep -q "^${1}:" /etc/passwd
        then
                echo "$1"
                return 0
        fi
    fi
    # if nothing was found,return false
        return 1
}

## Parses a string of comma-separated fstab options and finds out the 
## username/uid assigned within them. 
## echoes the found username/uid and returns true if found
## echoes "root" and returns false if none found
uid_from_fs_opts () {
        local uid=`echo $1 | egrep -o 'uid=[^,]+'`
        if [ -z "$uid" ]; then
                # no uid was specified,so default is root
                echo "root"
                return 1
        else
                # delete the "uid=" at the beginning
                uid_length=`expr length $uid - 3`
                uid=`expr substr $uid 5 $uid_length`
                echo $uid
                return 0
        fi
}

# unmount all shares first
sh "/etc/network/if-down.d/umountsshfs"

while read fs mp type opts dump pass extra
do
    # check validity of line
    if [ -z "$pass" -o -n "$extra" -o "`expr substr ${fs}x 1 1`" = "#" ]; 
    then
        # line is invalid or a comment,so skip it
        continue

    # check if the line is a selected line
    elif echo $opts | grep -q "comment=$SELECTED_STRING"; then

        # get the uid of the mount
        mp_uid=`uid_from_fs_opts $opts`

        if am_i "$mp_uid"; then
                        # current user owns the mount,so mount it normally
                        { sh -c "mount $mp" && 
                                echo "$mp mounted as current user (`id -un`)" || 
                                echo "$mp Failed to mount as current user (`id -un`)"; 
                        } &
                elif am_i root; then
                        # running as root,so sudo mount as user
                        if isa_number "$mp_uid"; then
                                # sudo wants a "#" sign icon front of a numeric uid
                                mp_uid="#$mp_uid"
                        fi 
                        { sudo -u "$mp_uid" sh -c "mount $mp" && 
                                echo "$mp mounted as $mp_uid" || 
                                echo "$mp Failed to mount as $mp_uid"; 
                        } &
                else
                        # otherwise,don't try to mount another user's mount point
                        echo "Not attempting to mount $mp as other user $mp_uid"
:
                        echo "Not attempting to mount $mp as other user $mp_uid"
                fi
    fi
    # if not an sshfs line,do nothing
done </etc/fstab

wait

如果您有wifi或其他不可靠的连接,请将以下内容放在/etc/network/if-down.d/中:

#!/bin/bash
# Not for loopback!
[ "$IFACE" != "lo" ] || exit 0

# comment this for testing
exec 1>/dev/null # squelch output for non-interactive

# umount all sshfs mounts
mounted=`grep 'fuse.sshfs\|sshfs#' /etc/mtab | awk '{ print $2 }'`
[ -n "$mounted" ] && { for mount in $mounted; do umount -l $mount; done; }

ubuntu – 如何在启动时挂载sshfs?的更多相关文章

  1. ubuntu – 在反映主机目录中的更改时提高SSHFS性能

    sshfsuser@host:~/host哪些附加选项会改善这种延迟?SSH不是设计为文件传输协议.SSHFS通过定期查看目录列表和缓存结果来工作.您可以控制缓存行为,但代价是与交互性相关的性能.如果您连接的SSH主机是通过高延迟链接或慢速连接访问的,那么禁用缓存会使浏览文件系统的事情变得痛苦.无论如何,请参阅手册页,并体验一下.mansshfs

  2. ubuntu – 如何在启动时挂载sshfs?

    使用NAS盒作为24/7文件服务器,我想使用sshfs从Ubuntu9.04桌面连接到它.目前,我在桌面的fstab中有这一行:我可以确认它适用于mount/mnt/storage.我需要的是在启动时安装它的一些方法,但是在建立网络连接之后.目前,Ubuntu中的Upstart不会生成网络事件.相反,它调用传统的sysvinit.默认情况下,NetworkManager已安装并正在运行;它包含一个

  3. ubuntu – 通过sshfs的Rsync跳过以下划线开头的文件名

    我正在尝试将OSX中的目录树同步到Ubuntu14.04.虽然大多数文件传输得很好,但名称以_(下划线)开头的文件却没有.这是我使用的命令:以及输出的一个例子:我的rsync是从自制软件安装的,版本信息:使用sshfs挂载远程位置:使用cp命令复制其中一个跳过的文件成功.我尝试添加–iconv=utf-8-mac,utf-8和–include’_*’选项,这些选项无效.我究竟做错了什么?

  4. 为什么无法设置SSHFS共享? “OSXFUSE文件系统不可用”错误

    我正在尝试从我的本地机器到远程机器设置一个SSHFS共享,但它不工作。我收到错误OSXFUSE文件系统不可用(见下文)。如何解决这个问题?FYI,我的本地机器是运行OSX10.9.3的MacBookPro笔记本电脑。远程机器实际上是运行CentOS的同一个硬件上的VirtualBox。我试过的解决方案描述了here.但它没有为我工作:如果你运行brew信息osxfuse并按照说明的信,我相信它会工作。这是什么酿造信息osxfuse告诉我:

  5. centos 使用sshfs快速搭建文件共享服务

    centos使用sshfs快速搭建文件共享服务看了很多教程都写的不够完整所以自己根据实际操作找遇到的坑共享一下给大家共享文件服务器必须打开ssh服务器

  6. 成长之路一,centos 配置

    整理了一下,主要就是安装,更新源,lrzsz,MysqL,vim,apache,PHP,subversion,sshfs,rsync.这次打算用不同的方式来装机。收获最大的是sshfs,一直就很想直接编辑linux下面的文件。MysqL,apache相关配置,打算直接用项目里面的配置文件覆盖过来。整个过程还算顺利,就是最后,找win-sshfs耗了些时间。明天的任务,1.配置好GameRun下面的服务器,争取可以直接运行。

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部