管理服务器上的 ssh authorized keys 的 Nodejs 工具
管理服务器上的 ssh authorized keys 的 Nodejs 工具
俺们是一个5个人的小团队。俺任sa,有时候其他同学要临时上服务器上去看一些东西,然后,各个服务器服务器各个账户各台电脑一堆 key很麻烦,更不要说我本来就手忙脚乱的你还通过 email 把你的 key 发过来然后叫我帮你添加到 4 台服务器上每个 staging 账户下,然后我帮你添加完之后我却不记得自己本来在做什么事儿了。
所以这个工具应运而生,直接从 GitHub API 拉 keys,你可以将服务器的访问权限点一下就分配给 organization 里的公开成员们。
图:

这个工具使用 IcedCoffeeScript 编写,代码在: https://github.com/layerssss/sshkeyd
        
          2 回复
        
      
      
        针对这个问题,我们可以设计一个简单的Node.js工具来管理服务器上的ssh authorized_keys文件。这个工具的主要功能是从GitHub API获取公钥,并将其自动添加到服务器的authorized_keys文件中。这将简化密钥管理和分发的过程,避免手动添加公钥带来的繁琐和错误。
以下是一个基本的实现思路:
实现步骤
- 获取GitHub公钥:通过GitHub API获取指定用户或组织的公钥。
- 解析公钥:将获取到的公钥数据进行解析。
- 更新授权文件:将解析后的公钥添加到服务器的authorized_keys文件中。
示例代码
这里提供一个简单的Node.js脚本示例,该脚本可以用于添加GitHub用户的公钥到指定的服务器中:
const fs = require('fs');
const fetch = require('node-fetch');
// 获取GitHub用户的公钥
async function getPublicKey(username) {
    const response = await fetch(`https://api.github.com/users/${username}/keys`);
    const data = await response.json();
    return data[0].key; // 假设只获取第一个公钥
}
// 更新服务器上的 authorized_keys 文件
function updateAuthorizedKeys(key, hostname = 'your.server.com', username = 'staging') {
    const filePath = `/home/${username}/.ssh/authorized_keys`;
    let content = '';
    if (fs.existsSync(filePath)) {
        content = fs.readFileSync(filePath, 'utf-8');
    }
    if (!content.includes(key)) {
        content += `\n${key}`;
        fs.writeFileSync(filePath, content);
        console.log(`Key added to ${filePath}`);
    } else {
        console.log('Key already exists.');
    }
}
(async () => {
    const publicKey = await getPublicKey('your-github-username');
    updateAuthorizedKeys(publicKey);
})();
注意事项
- 需要安装node-fetch库来处理HTTP请求。可以通过运行npm install node-fetch来安装。
- 确保脚本有足够的权限去修改服务器上的.ssh/authorized_keys文件。
- 在实际部署时,建议对敏感操作(如SSH密钥管理)进行额外的安全检查和日志记录。
这个简单的脚本可以帮助自动化公钥管理过程,减少人为错误,提高效率。
 
        
       
                     
                   
                    


