#!/usr/bin/env ruby # Usage: ssh-list-authorized-keys [username] # Copyright 2014, 2016 Luke Shumaker # Copyright 2019 bill-auger # # This is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This software is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public # License along with this manual; if not, see # . load "#{File.dirname(__FILE__)}/common.rb" all_users = load_all_users.values shared_logins = cfg['ssh_pseudo_users'] query_logins = ARGV & (all_users .map { | user | user['username'] }) query_groups = ARGV & (shared_logins.reject { | login | query_logins.include? login }) authorized_keys = '' # Buffer the output to avoid EPIPE when the reader hangs up early ssh_users = all_users.select do | user | user_login = user['username'] user_groups = user['groups' ] user_keys = user['ssh_keys'] has_shell_access = (query_logins.include? user_login) && (user_groups.include? 'ssh') has_push_access = ! (query_groups & user_groups).empty? has_ssh_key = ! user_keys.nil? (has_shell_access || has_push_access) && has_ssh_key end ssh_users.each do | user | user['ssh_keys'].each_pair do | email , ssh_key | authorized_keys += "#{ssh_key} #{user['fullname']} (#{user['username']}) <#{email}>\n" end end print authorized_keys