現在、開発目的のために、複数の浮浪者マシンをローカルに展開する簡単なスクリプトを作成しています。手順の一部は、sagキーをvagrantボックスに追加することです。
これまでのところ、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):そのようなファイルまたはディレクトリはありません
コマンドを1つずつ手動で入力すると、ssh-add
は正常に機能します:ssh-add /Users/admin/vms/.vagrant/machines/deploy-node.vagrant/virtualbox/private_key
アイデンティティが追加されました...
したがって、問題はawk
の結果に起因すると考えられます。この結果は、パイプに1行を3回かけるのではなく、3行のブロックを返します。
この疑いは、次のコマンドを発行することで確認できます。vagrant ssh-config | grep IdentityFile | awk '{print $2}' | wc -l
は、1の3倍の値を取得すると予想されるときに3を返します。
誰かがawk
の結果を分割してssh-add
が正しく機能する方法を知っているでしょうか?
awk
の順序付けで動作させると、各行に改行文字(\n
)を追加できます。
vagrant ssh-config | awk '/IdentityFile/{print $2"\n"}'
そして、これをssh-add
にパイプします。