#!/usr/bin/env ruby # # mount_sshfs.rb 0.2 # # Released into the public domain # # Please send bug reports and improvements to # christoffer.sawicki@gmail.com # # Canonical source # http://code.vemod.net/svn/misc/mount_sshfs/mount_sshfs.rb KEY = File.expand_path("~/.ssh/id_dsa") require "fileutils" unless (1..2).include?(ARGV.size) puts "Usage: #{File.basename($0)} [username@]address[:port] [directory]" exit 1 end # TODO: # Rename address address_and_port, directory = ARGV address, port = address_and_port.split(":") directory_name = directory ? File.basename(directory) : nil parts = [ address, directory_name ].compact mountpoint_directory_name = volume_name = parts.join("-") mountpoint = File.join("/Volumes", mountpoint_directory_name) unless File.directory?(mountpoint) Dir.mkdir(mountpoint) end options = [ "volname=#{volume_name}", "IdentityFile=#{KEY}", "IdentitiesOnly=yes", "follow_symlinks", "reconnect", ("port=#{port}" if port) ].compact command = [ "sshfs", "#{address}:#{directory}", mountpoint, "-o", options.join(",") ] # puts "Options:" # puts options # puts puts(command.join(" ")) system(*command) if $?.success? puts "sshfs filesystem mounted successfully!" puts "Volume name: #{volume_name}" system("open", mountpoint) else puts puts "Failed to mount remote directory." Dir.rmdir(mountpoint) end exit $?.exitstatus