這個問題原本以爲是個特別簡單的問題,昨天弄的時候折騰了半晚上。因此打算記錄下過程,主要也被網上的各類信息誤導了。shell
先看下我這vagrant配置信息apache
Vagrant.configure("2") do |config| config.vm.box = "base" config.vm.box_check_update = false config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "private_network", ip: "192.168.0.1" config.vm.synced_folder "/data/www", "/data/www" # config.vm.provision "shell", inline: <<-SHELL # apt-get update # apt-get install -y apache2 # SHELL end
發現沒有登陸信息,而後網上查了下資料說是默認的登陸用戶名是vagrant,密碼同樣。就像下面。vim
config.ssh.username = "vagrant" config.ssh.password = "vagrant"
配置上上面的信息而後 vagrant ssh登陸,發現登陸正常沒有問題。修改root的密碼。ssh
sudo -s passwd
改完以後按照網上信息修改.net
vim /etc/ssh/sshd_config PermitRootLogin prohibit-password 改成 PermitRootLogin yes 重啓ssh服務 service sshd restart
退出,修改vagrant登陸信息vagrant
config.ssh.username = "root" config.ssh.password = "密碼" 而後 vagrant ssh 提示 root@127.0.0.1: Permission denied (publickey).
不容許登陸。一直沒搞明白。後來又仔細看了下
/etc/ssh/sshd_config
發現有個關於密碼的配置
PasswordAuthentication no
意思應該是密碼受權,打開這個配置試試rest
PasswordAuthentication yes 記着重啓服務 service sshd restart
而後改配置用戶名
config.ssh.username = "root"
config.ssh.password = "密碼"
此次看着是對了,提示輸入root密碼,輸入完以後,就能夠直接登陸了。code
等等,我不是配置密碼了麼?爲何還提示我輸入密碼
config.ssh.password = "密碼"
換成 vagrant 用戶名,試着註釋掉密碼配置,照樣正常登陸。在換成root用戶名,註釋掉密碼配置,提示輸入密碼,說明密碼登陸的配置沒有實際意義,配不配置都須要手動輸入密碼。ip
可是,vagrant用戶爲何能夠不須要密碼直接登陸,可能vagrant默認是祕鑰登陸的。使用vagrant帳號登陸看看vagrant的祕鑰登陸配置。get
vim ~/.ssh/authorized_keys 果真有祕鑰配飾 JbDoShF6plkIvZfV1ol3OMGYRtG8V/fYOCgfv9VBHmBVda+yIuybtD vagrant
證明了咱們的猜想,vagrant默認是祕鑰登陸,密碼配置沒有任何意義。
那咱們怎麼將咱們的root用戶也改成祕鑰登陸呢?
下面咱們看下配置步驟
首先使用 root輸密碼登陸
vim /etc/ssh/sshd_config 打開兩個關於祕鑰的配置 RSAAuthentication yes PubkeyAuthentication yes 配置公鑰 vim ~/.ssh/authorized_keys 將本身的公鑰添加到這裏。 重啓服務 service sshd restart exit 退出虛擬機
修改vagrant配置數據,註釋密碼,加上私鑰地址,
config.ssh.username = "root" #config.ssh.password = "vagrant" config.ssh.private_key_path = "/Users/XXX/.ssh/id_rsa"
不出意外,就能夠跟vagrant用戶同樣免密登陸了。
有時候會提示輸入私鑰密碼,說明沒有找到私鑰地址,作下添加私鑰的操做就能夠了。
sudo ssh-add -K ~/.ssh/id_rsa
是否是就能夠祕鑰免密登陸了???