If you want to use SSH or SFTP with PHP you need the SSH2 extension. Unfortunately MAMP doesn't come with it out of the box. Last year I had written about how to add the SSH2 extension to MAMP, on PHP 5.6. In the meantime two major changes ocurred which pretty much nullified the process: OS X El Capitan was released requiring new prerequisites to be installed and PHP 7 was included which requires an entirely new approach to installing SSH2 (it's no longer as simple as using pecl). In this article we'll discuss the process required to get the SSH2 extension installed on PHP7 in MAMP.

OS X 10.11 El Capitan pre-requisites

OS X 10.11 El Capitan no longer includes the development headers for the OpenSSL library which are required to build libssh2. Therefore, we have to install a copy of the library using Homebrew:

brew update
brew install openssl

This will install OpenSSL in the directory /usr/local/opt/openssl

Installing libssh2

First we need to install libssh2 which is a dependency to the PHP module. Download libssh2 from its page (direct link). In Terminal commands:

wget https://www.libssh2.org/download/libssh2-1.7.0.tar.gz 
tar xvzf libssh2-1.7.0.tar.gz cd libssh2-1.7.0 
./configure --with-libssl-prefix=/usr/local/opt/openssl 
make 
sudo make install

Important note: the --with-libssl-prefix=/usr/local/opt/openssl part should only be used if you followed the instructions of the previous section for installing OpenSSL through Homebrew. Otherwise provide the directory where the OpenSSL library is located on your system.

If you are missing autoconf you may try to install it using Homebrew:

brew install autoconf

Make it possible to use pecl with MAMP

You need to download the PHP sources matching your PHP version. In the case of MAMP that's still PHP 7.0.0. Therefore we need to do the following:

cd /Applications/MAMP/bin/php/php7.0.0/ 
wget http://de1.php.net/get/php-7.0.0.tar.bz2/from/this/mirror -O php-7.0.0.tar.bz2 
tar xjf php-7.0.0.tar.bz2 
mv php-7.0.0 php 
mkdir include 
mv php include/ 
cd include/php 
./configure

Install SSH2 and activate it

The SSH2 module is only available through PECL for PHP 5. PHP 7 has a different API for modules, meaning that the SSH2 module cannot be compiled. That would be a disaster if it wasn't for some kind folks who picked up the development and ported the module to PHP 7. We will need to download, compile and install the PHP 7 module for SSH2:

wget https://github.com/Sean-Der/pecl-networking-ssh2/archive/php7.zip cd pecl-networking-ssh2-php7 phpize ./configure make sudo make install

Now open MAMP Pro's main window and hit ⌘-4 or go to File ‣ Edit Template ‣ PHP 7.0.0. Find the Extensions section and add the line

extension=ssh2.so

Save the file, close the editor window and restart Apache. To confirm that everything is installed launch a phpinfo() page and loog for ssh2. It should be present.

For the CLI executable of PHP you also need to edit another file, /Applications/MAMP/bin/php/php7.0.0/conf/php.ini Again add the line

extension=ssh2.so

To confirm that everything is installed porperly for the CLI PHP binary do

php -i | grep ssh

you should get something like

Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp ssh2 libssh2 version => 1.7.0

That's it!

One comment

  • I have used this everytime I update MAMP.
    Anyhow, just few comments:

    if like me you do not have iconv you have to run it without it:

    ./configure --without-iconv

    Also there is one line missing on: you have to unzip php7.zip, might not be obvious for some people.

    Works like a charm :)

    thanks