First, create a free ngrok account. This is necessary to use TCP with their service. Then capture your API key, and set it as a config var on your Heroku app like this:
$ heroku config:set NGROK_API_TOKEN=xxxxxx
Next, add this buildpack to your app:
$ heroku buildpacks:clear $ heroku buildpacks:set https://github.com/jkutner/heroku-buildpack-ssh.git
Then add your primary buildpack. For example, if you are using Ruby:
$ heroku buildpacks:add heroku/ruby
To enable SSH run this command:
$ heroku config:set SSH_ENABLED="true"
Finally, commit your changes, and redeploy the app:
$ git add Procfile $ git commit -m "Added with_ssh" $ git push heroku master
Once your app is running with the SSH buildpack and the
with_ssh command, you'll see something like
this in your logs:
2015-05-19T16:06:36.530988+00:00 app[web.1]: Starting sshd for u18370
Download the SSH key and set it's permissions by running these commands:
$ heroku run cat .ssh/id_rsa > ~/.ssh/heroku_id_rsa $ chmod 600 ~/.ssh/heroku_id_rsa
Browse to your ngrok dashboard to see the address of the proxy.
It will be something
tcp://0.tcp.ngrok.io:40306. Use this host and port with the
username in the logs to create an SSH command like this:
$ ssh -i ~/.ssh/heroku_id_rsa -p 40306 firstname.lastname@example.org ... Are you sure you want to continue connecting (yes/no)? yes ... Connected to web.1 ~ $
Now you can inspect a running process:
~ $ ps aux | grep ruby u18370 64 0.5 0.0 27792 4760 pts/0 Sl 21:40 0:00 bundle exec puma -C config/puma.rb u18370 67 0.0 0.0 8864 652 pts/0 S+ 21:40 0:00 grep ruby
Copy the snippet above into CLI.