I want to install a dmg file on a remote server. All I have is an ssh access. Since a DMG is a disk image, I tried to mount it, but mount does not seem to recognize its format.

file says my dmg file is a VAX COFF executable.


First, mount the dmg image : sudo hdiutil attach <image>.dmg

The image will be mounted to /Volumes/<image>. Mine contained a package which i installed with: sudo installer -package /Volumes/<image>/<image>.pkg -target /

Finally unmount the image: sudo hdiutil detach /Volumes/<image>.

  • I did that with Docker.dmg and I had no <image>.pkg so that dit not work Oct 27 '19 at 15:56
  • mine is <image>.app instead of <image>.pkg after doing sudo hdiutil attach <image>.dmg, how can i do then?
    – jack
    Mar 27 at 18:13

You should be able to mount the .dmg using:

hdiutil attach /path/to/file.dmg

And then copy its contents (which appears in /Volumes) where ever you like.


If you want to script the install it requires a few more steps since the name of the .dmg file, the name of the Volume created, the name of the application, and the name of the device that needs to be detached can all be different. Plus they can have spaces in them.

Also a .dmg can have an .app file or a .pkg file in it and these require different behavior.

Here's a bash function to install a dmg from a remote URL:

# usage: installdmg https://example.com/path/to/pkg.dmg
function installdmg {
    set -x
    tempd=$(mktemp -d)
    curl $1 > $tempd/pkg.dmg
    listing=$(sudo hdiutil attach $tempd/pkg.dmg | grep Volumes)
    volume=$(echo "$listing" | cut -f 3)
    if [ -e "$volume"/*.app ]; then
      sudo cp -rf "$volume"/*.app /Applications
    elif [ -e "$volume"/*.pkg ]; then
      package=$(ls -1 "$volume" | grep .pkg | head -1)
      sudo installer -pkg "$volume"/"$package" -target /
    sudo hdiutil detach "$(echo "$listing" | cut -f 1)"
    rm -rf $tempd
    set +x

Note if your .dmg has an .app file that runs to install the program, then you will need to do something different again.

  • This will only work for dmg‘s containing ready-to-run apps, not for packages or installer apps.
    – nohillside
    Jan 7 '18 at 19:58
  • @patrix can you give me some examples of packages and installer apps that I can test against to refine the answer? Jan 7 '18 at 20:11
  • Packages are easy (end in .pkg), but an installer app looks the same as a real one
    – nohillside
    Jan 7 '18 at 20:19
  • this does not detach the file. hdiutil: detach failed - No such file or directory Apr 9 '18 at 19:14
  • 1
    @NicholasDiPiazza I wish Apple would make this easier by providing and enforcing a single easy to use standard and giving developers tools to automatically convert their existing installers to use the new standard. Apr 27 '18 at 22:21

I had to mount and copy the .app to /Applications folder. For Etcher.app:

First as @trojanfoe said :

sudo hdiutil attach /Users/janatac/Etcher-1.2.1.dmg


sudo cp -R /Volumes/Etcher\ 1.2.1/Etcher.app /Applications

You then have your application in /Applications folder

Don't forget to unmount the volume :

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Got it working after reading instructions from a blog post.


You could try the command open disk://host.tld/image.dmg.

  • open didn't do anything, just exit, without error message.
    – philant
    Dec 5 '12 at 9:36
  • 2
    Yes it does. I just tested it. It won't display anything until the disk image has been completely mounted, so you will have to wait a minute or so before it appears in /Volumes. (It works if you ssh in and type open path/to/file.dmg. I don't think disk://host.tld/ works though.)
    – daviewales
    Dec 5 '12 at 12:19
  • Helpful, though maybe not exactly what the OP needed. Thanks. Feb 9 '14 at 12:06
  • I found that open -W </path/todmg> worked (it waits until the volume has actually appeared).
    – gib
    Jun 8 '20 at 10:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .