Я в настоящее время соединяю быстрый сценарий, который развертывает несколько бродячих машин локально в dev целях. Паритет процедуры состоит из добавления 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: должностное лицо (/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, когда я ожидал бы получать 3 раза это 1 значение.
был бы кто-то знать, как разделить результат awk
так ssh-add
работы правильно?
Можно заставить его работать с упорядочиванием awk
добавить символ новой строки (\n
) к каждой строке:
vagrant ssh-config | awk '/IdentityFile/{print $2"\n"}'
И затем передайте это по каналу к ssh-add
.