ssh 命令将公钥添加到本地的“authorized_keys”?

ssh 命令将公钥添加到本地的“authorized_keys”?

是否有单行命令来告诉 SSH 将提供的公钥添加到本地计算机的authorized_keys文件中? 的本地版本ssh-copy-id

我正在编写一个 chef 菜谱,并希望确保为某个用户设置特定的 ssh 公钥。我可以~/.ssh/authorized_keys每次都覆盖该文件,或者尝试以某种黑客方式添加该行,但如果有官方命令,它会更强大并防止重复。

就像是:

ssh-add-local-key "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDeblahdeblah user@somwhere"

对于像 Ubuntu 或 Debian 这样的 apt 系统,有一个apt-add-repository命令,所以我想知道是否有 SSH 等效命令。

我知道我可以使用“echo blah >> authorized_keys”,但我想要一些幂等的东西,我可以定期运行它。文件>>大小每次都会增加。

答案1

我不知道有这样的本地命令。我不喜欢它ssh-copy-id foo@localhost(因为它会打开 SSH 连接),更不喜欢容易出错的echo foo >> ~/.ssh/authorized_keys

但是既然您正在使用 chef,为什么不使用您已有的 chef 工具(主要是 ruby​​)呢?

例如:

ruby_block "authorized_keys" do
  block do
    file = Chef::Util::FileEdit.new("/home/#{username}/.ssh/authorized_keys")
    file.insert_line_if_no_match("/#{authorized_key}/", "#{authorized_key}")
    file.write_file
  end
end

不匹配时插入行文档:

#insert_line_if_no_match(regex, newline) ⇒ Object

逐行搜索文件,并将每一行与给定的正则表达式匹配,如果不匹配,则在文件末尾插入换行符

对我来说,这似乎并没有什么特别,并且提供了一种易于理解的方法来解决您的问题。

另一种选择是比尔·沃纳斯回答类似问题:https://stackoverflow.com/a/28283354/2376817

答案2

现在有一位厨师授权密钥食谱。你只需将密钥添加到食谱中即可:

ssh_authorize_key '[email protected]' do
  key 'AAAAB3NzaC1yc2EAAAADAQABAAABAQCctNyRouVDhzjiP[...]'
  user 'root'
end

请注意,如果您使用本手册,任何手动添加的键都将被删除。

答案3

建议:在环回(localhost)上运行 ssh-copy-id。

ssh-copy-id localhost

相关内容