ssh命令添加一个公钥到本地`authorized_keys`?

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

我正在写一个厨师食谱,并希望确保为特定用户设置特定的SSH公钥。 我每次都可以覆盖~/.ssh/authorized_keys文件,或者尝试一些冒险的方法来添加行,但是如果有官方的命令,它会更加健壮并且防止重复。

就像是:

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

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

更新 :我知道我可以使用“echo blah >> authorized_keys”,但我想要一些幂等的,我可以定期运行。 用>>这个文件每次都会增长。

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

但是,既然你使用的是厨师,为什么不使用你可用的厨师工具(主要是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文档:

 #insert_line_if_no_match(regex, newline) ⇒ Object 

一行一行地search文件,如果不匹配,将每一行与给定的正则expression式匹配,在文件末尾插入换行符

这对我来说似乎并不算什么,提供了一个简单易懂的方法来解决你的问题。

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