Chef uses a special key pair to create new clients called the “validation client.” If you lose this file, or perhaps you end up with an empty CouchDB database and no longer have this client in the database, you could get a 401 Unauthorized error when trying to use it.
$ sudo chef-client [Thu, 14 Jul 2011 11:44:44 +0000] INFO: *** Chef 0.10.2 *** [Thu, 14 Jul 2011 11:44:44 +0000] INFO: Client key /etc/chef/client.pem is not present - registering [Thu, 14 Jul 2011 11:44:44 +0000] INFO: HTTP Request Returned 401 Unauthorized: Failed to authenticate. Ensure that your client key is valid. [Thu, 14 Jul 2011 11:44:44 +0000] FATAL: Stacktrace dumped to /var/cache/chef/chef-stacktrace.out [Thu, 14 Jul 2011 11:44:44 +0000] FATAL: Net::HTTPServerException: 401 "Unauthorized"
Removing your validation key on the server, which is typically stored on the filesystem at /etc/chef/validation.pem and restarting the chef-server will create a new key pair both on disk and in the database.
$ ls -l /etc/chef/validation.pem -rw-r--r-- 1 root root 1676 2011-07-14 11:44 /etc/chef/validation.pem $ sudo rm /etc/chef/validation.pem $ sudo /etc/init.d/chef-server restart * Restarting chef-server ~ Killing pid 10783 with INT ~ In 12051 ...done. $ ls -l /etc/chef/validation.pem -rw------- 1 chef chef 1679 2011-07-14 11:55 /etc/chef/validation.pem
The same process works with the webui key pair, which knife uses as the default “admin” key to create initial knife clients.
$ ls -l /etc/chef/webui.pem -rw------- 1 chef chef 1675 2011-07-14 11:31 /etc/chef/webui.pem $ sudo rm /etc/chef/webui.pem $ sudo /etc/init.d/chef-server restart * Restarting chef-server ~ Killing pid 12051 with INT ~ In 12091 ...done. $ ls -l /etc/chef/webui.pem -rw------- 1 chef chef 1675 2011-07-14 11:57 /etc/chef/webui.pem $ sudo /etc/init.d/chef-server-webui restart * Restarting chef-server-webui ~ Killing pid 10945 with INT ~ In 12129 ...done.
If you’ve also lost your key for your knife client, you will need to create another one. Use a new client name unless you’re sure that the server does not still contain a registration for the previous client. After creating the new client, you can delete the old one from the server using ‘knife client delete MY_OLD_CLIENT’ by replacing MY_OLD_CLIENT with the name of the former client.
$ sudo knife configure --initial Overwrite /home/ubuntu/.chef/knife.rb? (Y/N) y Please enter the chef server URL: [http://ip-10-204-150-209.ec2.internal:4000] Please enter a clientname for the new client: [ubuntu] new_ubuntu Please enter the existing admin clientname: [chef-webui] Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem] Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef/validation.pem] Please enter the path to a chef repository (or leave blank): Creating initial API user... Created client[new_ubuntu] Configuration file written to /home/ubuntu/.chef/knife.rb
Provided with the new validation.pem, your node should be able to register now, as long as there is not still a client by the same name. If there is, you will need to delete that client first. Note that on Opscode Hosted Chef, you currently will need to delete the node as well, because the default permissions only allow the client that created the node to modify it.
$ knife client list chef-validator chef-webui ip-10-204-150-209.ec2.internal new_ubuntu ubuntu $ knife client delete ip-10-204-150-209.ec2.internal Do you really want to delete ip-10-204-150-209.ec2.internal? (Y/N) y Deleted client[ip-10-204-150-209.ec2.internal] $ sudo chef-client [Thu, 14 Jul 2011 12:04:24 +0000] INFO: *** Chef 0.10.2 *** [Thu, 14 Jul 2011 12:04:26 +0000] INFO: Client key /etc/chef/client.pem is not present - registering [Thu, 14 Jul 2011 12:04:27 +0000] INFO: Run List is [] [Thu, 14 Jul 2011 12:04:27 +0000] INFO: Run List expands to [] [Thu, 14 Jul 2011 12:04:27 +0000] INFO: Starting Chef Run for ip-10-204-150-209.ec2.internal [Thu, 14 Jul 2011 12:04:27 +0000] INFO: Loading cookbooks [] [Thu, 14 Jul 2011 12:04:27 +0000] WARN: Node ip-10-204-150-209.ec2.internal has an empty run list. [Thu, 14 Jul 2011 12:04:28 +0000] INFO: Chef Run complete in 0.623124 seconds [Thu, 14 Jul 2011 12:04:28 +0000] INFO: Running report handlers [Thu, 14 Jul 2011 12:04:28 +0000] INFO: Report handlers complete
I’ve ran into this problem before and this resolved it. I’ve got a current case where I removed the validation key and restart chef-server but the validation.pem file was not regenerated. I’ve tried everything I can think of but cannot get it recreated. Any ideas?