我目前正在编写一个快速脚本,为开发目的在本地部署多台迷航机器。这个过程的标准是将ssh键添加到迷航框中。
到目前为止,获取ssh键的路径相当容易:vagrant ssh-config | grep IdentityFile | awk '{print $2}'
它提供了预期的产出:
/Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key /Users/admin/vms/.vagrant/machines/backend-node.vagrant/virtualbox/private_key /Users/admin/vms/.vagrant/machines/app-node.vagrant/virtualbox/private_key
但是,将结果传递给ssh-add会引发异常:
ssh_askpass: exec(/usr/X11R6/bin/ssh-askpass):没有这样的文件或目录
当我逐一手动输入命令时,ssh-add工作正常:ssh-add /Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key
身份补充..。
因此,我认为这个问题来自于awk的结果,它返回一个由3行组成的块,而不是每一行3次返回管道。
这种怀疑可以通过发出:vagrant ssh-config | grep IdentityFile | awk '{print $2}' | wc -l来证实,当我期望得到3倍的1值时,它返回3。
会不会有人知道如何分割awk的结果,使ssh-add正常工作?
发布于 2018-10-05 07:05:21
您可以通过排序awk将换行符(\n)添加到每一行中:
vagrant ssh-config | awk '/IdentityFile/{print $2"\n"}'然后将其传输到ssh-add。
https://askubuntu.com/questions/1081086
复制相似问题