管理服务器上的 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密钥管理)进行额外的安全检查和日志记录。
这个简单的脚本可以帮助自动化公钥管理过程,减少人为错误,提高效率。