Vagrant SSH 登录要求密码

故障现象

日常操作系统是 Windows ,通常使用 Vagrant 来搭建本地开发环境。在某次重装系统后,像往常一样用 vagrant up --provision 命令成功地创建了开发环境,接下来用 vagrant ssh 登录系统时,竟然提示要求输入密码:

[email protected]'s password:

这是之前从未遇到过的问题。虽然可以用默认密码 vagrant 登录系统,但是总觉得不爽。一定要找到原因。

排查原因

vagrant ssh --debug 命令输出调试信息:

DEBUG safe_exec: Converted - Command: `"C:\\Windows\\System32\\OpenSSH\\/ssh.EXE"` Args: `["[email protected]", "-p", "2222", "-o", "LogLevel=FATAL", "-o", "Compression=yes", "-o", "DSAAuthentication=yes", "-o", "IdentitiesOnly=yes", "-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null", "-o", "PubkeyAcceptedKeyTypes=+ssh-rsa", "-o", "HostKeyAlgorithms=+ssh-rsa", "-i", "D:/myproject/devenv/.vagrant/machines/myproject/virtualbox/private_key", "-o", "ForwardAgent=yes"]`
[email protected]'s password:

发现 ssh 命令确实有使用 private_key 文件来进行验证身份。但是不知道为什么失败了,转而要求输入密码。

vagrant ssh -- -v 命令输出 SSH 调试信息:

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: D:/myproject/devenv/.vagrant/machines/myproject/virtualbox/private_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'D:/myproject/devenv/.vagrant/machines/myproject/virtualbox/private_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "D:/myproject/devenv/.vagrant/machines/myproject/virtualbox/private_key": bad permissions
debug1: Next authentication method: password
debug1: read_passphrase: can't open /dev/tty: No such file or directory
[email protected]'s password:

SSH 警告说 UNPROTECTED PRIVATE KEY FILE! ,原因竟然是 private_key 文件的权限「过于开放」(???),因此忽略使用该文件,并转而使用密码验证。真是狗拿耗子多管闲事!

解决方法

Linux 下可以使用 chmod 命令将 private_key 文件的权限设置为 600 。而 Windows 系统则稍微麻烦点,在 private_key 文件的右键菜单中选择「属性」,打开「安全」标签页,点击「高级」按钮,在新的「高级安全设置」对话框中点击「禁用继承」,删除其他用户的访问权限,只保留当前用的读写权限。