今天在設置Linux免登錄的時候,按照Hadoop官方說明的ssh設置,然後通過ssh localhost測試,可是總是提示要輸入密碼。
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
琢磨了一下SSH的原理
命令1:$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
這個命令會產生一個公鑰(~/.ssh/id_rsa.pub)和密鑰(~/.ssh/id_rsa),
-t dsa:表示使用密鑰的加密類型,可以爲'rsa'和'dsa'
-P '':表示不需要密碼登錄
-f ~/.ssh/id_dsa:表示密鑰存放的路徑爲${USER}/.ssh/id_dsa
命令2:$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
將本機的公鑰添加進authorized_keys中,這樣允許本機通過ssh的形式免密碼登錄
注意使用>>,而不是>,因爲如果其它主機(如A)也採用免登陸的形式登錄,也可以把主機A的公鑰添加到authorized_keys文件中。這樣主機A就可以免登陸ssh到本機了。
開始也找不出什麼原因,後來用root用戶跟蹤/var/log/message日誌,發現每次ssh localhost的時候,有以下日誌出現
Aug 20 14:47:40 vm-360-149-11 sshd[11072]: Authentication refused: bad ownership or modes for file /home/linzm/.ssh/authorized_keys
於是更改authorized_keys的權限爲600
chmod 600 authorized_keys
問題解決,配置成功。
ssh localhost再也不需要輸入密碼了。