If you've had to re-associate your virtual machine with vagrant, but
vagrant ssh now requires a password to connect, this is because the ssh key associated with the box disappeared. You can still get in with the password
vagrant (usually), but many workflows will need the automatic connection.
Here's how to regain public/private key authentication to ssh into your vagrant virtual machine:
vagrant up, then
vagrant ssh-config to find the IdentityFile:
$ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile "/Users/blk/.vagrant.d/insecure_private_key" IdentitiesOnly yes LogLevel FATAL
cd to the directory of that identity file, and look for a
public file. If it doesn't exist, create one:
$ cd /Users/blk/.vagrant.d/ $ ls -l drwxr-xr-x 4 blk staff 136B Apr 5 11:26 boxes/ drwxr-xr-x 8 blk staff 272B Apr 26 19:10 data/ drwxr-xr-x 9 blk staff 306B May 26 2015 gems/ -rw------- 1 blk staff 1.6K May 14 2015 insecure_private_key -rw-r--r-- 1 blk staff 147B Nov 16 12:13 plugins.json drwxr-xr-x 3 blk staff 102B May 14 2015 rgloader/ -rw-r--r-- 1 blk staff 3B May 14 2015 setup_version drwxr-xr-x 2 blk staff 68B Apr 5 11:26 tmp/
Note the lack of a public key or a
$ file insecure_private_key insecure_private_key: ASCII text $ ssh-keygen -y -f insecure_private_key > ./insecure_public_key.pub $ cat insecure_public_key.pub
And that will output the content of the public key. Copy that with your mouse.
$ vagrant ssh Enter password: vagrant@vagrant $ cd ~/.ssh/ vagrant@vagrant $ ls authorized_keys vagrant@vagrant $ vim authorized_keys
Then press the [escape] key, type
:set paste, press [enter], [g] [g] [O], paste the line you copied, [escape] [:] [w] [q]
Those are the vim instructions; you can do it with nano or pico or emacs or ed or cat if you want; just make sure that the copied text ends up on its own line at the end of the file.
Then exit the vagrant machine and reconnect to test.
vagrant@vagrant $ exit $ vagrant ssh vagrant@vagrant $
Hey, it works!
If this does not work,
cd to the folder containing the VM's
Vagrantfile while the machine is running. Run
ls -al and look for an entry named
.vagrant directory exists,
cd .vagrant. Then:
/.vagrant$ tree . . └── machines └── default └── virtualbox ├── action_provision ├── action_set_name ├── id ├── private_key └── synced_folders 3 directories, 5 files
See private_key there? That's going to be useful.
cd machines/default/virtualbox/, then follow the steps listed above, begining with