最近在搭建一個集群,希望從一台機器上以root身份無密碼登錄到另一台機器上。比如有兩台機器A和B, 希望從A機器上登錄到B機器上,登錄后是root身份。在A上登錄命令形式為:ssh root@B。
所有機器都是Ubuntu 12.04系統,且都安裝了openssh-server。而且在每台機器的/etc/ssh/sshd_config文件中PermitRootLogin項均設置為了Yes。當從機器A上輸入命令:ssh root@B后,提示輸入 root@B's password:, 輸入相應密碼后,提示錯誤Permission denied, please try again.
從網上搜索了一些解決方案,其中有兩個是可行的:
方案一:將機器A上$HOME/.ssh/id_rsa.pub文件拷貝到機器B上,然后將該文件中的內容添加到機器B root用戶主目錄下的.ssh目錄下的authorized_keys文件中。然后在機器A上再使用ssh root@B就能成功登錄了。這種方式比較麻煩,需要先把A機器的公鑰拷貝到B機器上,然后在B機器上切換到root用戶,將公玥內容附加到root用戶主目錄下.ssh目錄下的authorized_keys文件中。我們希望找到一種更加簡單的方案。
方案二:我們試圖找到上面提示錯誤產生的根源。正常情況下,我們在機器A上輸入命令:ssh root@B后,提示輸入密碼,輸入正確密碼后應該能夠登錄到B上,而且登錄后的身份是root用戶。那么為什么我們在輸入密碼后會提示Permission denied呢?原來,Ubuntu桌面系統默認情況下是沒有啟用root帳號的,在沒有開啟root帳號的情況下試圖以root身份登錄到另一台機器是不可能做到的。所以我們要做的是在機器B上啟用root帳號。啟用的方法很簡單,只需要在機器B上輸入下面的命令,並為root用戶配置密碼就可以了。
sudo passwd root
配置好密碼后,再使用上面的命令登錄,然后輸入配置的密碼就能無誤登錄了。如果想無密碼登錄只需要在機器A上使用命令ssh-copy-id root@B,然后根據提示輸入配置的root用戶的密碼,就能正確配置好root無密碼登錄到B機器了。
如果希望關閉啟用的root帳號,可以使用下面的命令來關閉:
sudo passwd -dl root
方案二參考了Ask Ubuntu上的內容,下面是最有價值的部分:
Setting PermitRootLogin to Yes in your SSH config does not override Ubuntu's security policy that does not allow root logins.
If you want to login as root over SSH you will need to first enable the root account (Note that youvirtually never need to login as root, sudo will virtually always be sufficient for any task requiring root privileges. See here for more info on Ubuntu's security policy regarding sudo and the root account).
That said, if you really want to log in as root over SSH first enable the root account by setting a password for it.
sudo passwd root
Then, assuming PermitRootLogin is still enabled in your SSH server config, you should be able to login as root via SSH. Note that you really, really should be using Public/Private key pairs to login to the root account to keep the fairly risky business of enabling a root account and allowing it to be logged into via SSH from becoming just outright dangerous.
Once you've finished doing whatever you need to do with the root account I would recommend disabling it again by removing the password.
sudo passwd -dl root
