diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index baad9095b70832695c6e2fce8e01ff6727032e77..b11a0b04687c0cd265003dad269e126a3b58f234 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -11,6 +11,7 @@ class Admin::UsersController < Admin::ApplicationController
   def show
     @personal_projects = user.personal_projects
     @joined_projects = user.projects.joined(@user)
+    @ssh_keys = user.keys.order('id DESC')
   end
 
   def new
@@ -107,6 +108,27 @@ class Admin::UsersController < Admin::ApplicationController
     end
   end
 
+  def show_key
+    @key = user.keys.find(params[:key_id])
+
+    respond_to do |format|
+      format.html { render 'key' }
+      format.js { render nothing: true }
+    end
+  end
+
+  def remove_key
+    key = user.keys.find(params[:key_id])
+
+    respond_to do |format|
+      if key.destroy
+        format.html { redirect_to [:admin, user], notice: 'User key was successfully removed.' }
+      else
+        format.html { redirect_to [:admin, user], alert: 'Failed to remove user key.' }
+      end
+    end
+  end
+
   protected
 
   def user
@@ -118,7 +140,7 @@ class Admin::UsersController < Admin::ApplicationController
       :email, :remember_me, :bio, :name, :username,
       :skype, :linkedin, :twitter, :website_url, :color_scheme_id, :theme_id, :force_random_password,
       :extern_uid, :provider, :password_expires_at, :avatar, :hide_no_ssh_key,
-      :projects_limit, :can_create_group, :admin
+      :projects_limit, :can_create_group, :admin, :key_id
     )
   end
 end
diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml
index 29717aedd801605fc2f601f22cfeed9a5884f69d..ef873fb2298cd423c603dfce0581e696f1f824f7 100644
--- a/app/views/admin/users/show.html.haml
+++ b/app/views/admin/users/show.html.haml
@@ -20,6 +20,8 @@
     %a{"data-toggle" => "tab", href: "#groups"} Groups
   %li
     %a{"data-toggle" => "tab", href: "#projects"} Projects
+  %li
+    %a{"data-toggle" => "tab", href: "#ssh-keys"} SSH keys
 
 .tab-content
   #account.tab-pane.active
@@ -217,3 +219,28 @@
                       - if tm.respond_to? :project
                         = link_to project_team_member_path(project, @user), data: { confirm: remove_from_project_team_message(project, @user) }, remote: true, method: :delete, class: "btn-tiny btn btn-remove", title: 'Remove user from project' do
                           %i.fa.fa-times
+  #ssh-keys.tab-pane
+    - if @ssh_keys.any?
+      .panel.panel-default
+        %table.table
+          %thead.panel-heading
+            %tr
+              %th Title
+              %th Fingerprint
+              %th
+          %tbody
+            - @ssh_keys.each do |key|
+              %tr
+                %td
+                  = link_to user_key_admin_user_path(@user, key) do
+                    %strong= key.title
+                %td
+                  %span
+                    (#{key.fingerprint})
+                  %span.cgray
+                    added #{time_ago_with_tooltip(key.created_at)}
+                %td
+                  = link_to 'Remove', remove_user_key_admin_user_path(@user, key), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-small btn-remove delete-key pull-right"
+
+    - else
+      .nothing-here-block User has no ssh keys
diff --git a/config/routes.rb b/config/routes.rb
index 9b99f0643a7f2a21791113ea725bf9eab2dab3d2..80a509976a1ec0066d5457dbca6edb650181ab70 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -84,6 +84,8 @@ Gitlab::Application.routes.draw do
         put :team_update
         put :block
         put :unblock
+        get 'key/:key_id', action: 'show_key', as: 'user_key'
+        delete 'key/:key_id', action: 'remove_key', as: 'remove_user_key'
         delete 'remove/:email_id', action: 'remove_email', as: 'remove_email'
       end
     end