ssh 雙機互信:免密碼登陸設置步驟及常見問題

在 linux 系統管理中,設置免密碼登陸,進行機器的批量管理是最經常使用的一個方法。好比針對幾十甚至上百臺線上機器,一般咱們會設置一臺「發佈機」做爲中央控制機對其它線上機器免密碼登陸,而後進行軟件、配置文件的分發、更新、部署。固然了,針對上面的問題,解決方案並不是最優且惟一,好比你也能夠用 expect 模擬自動輸入來完成自動登陸驗證這一過程,或者用如今一些開源的軟件自動化配置和部署工具,好比 Puppet,但這都不在本文的討論範疇,今天我們要說的就是這種最原始、最有效、最直接的方式:免密碼登陸。html

(1)問題:

假設:現有2臺機器linux

一、我的機192.168.1.110ubuntu

二、服務器192.168.1.112api

要使110無需密碼經過ssh登入112安全

(2)步

一、建立密鑰

miao@u32-192-168-1-110:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): (忽略:直接回車便可)
Enter same passphrase again: (忽略:直接回車便可)
Your identification has been saved in /home/miao/.ssh/id_rsa.
Your public key has been saved in /home/miao/.ssh/id_rsa.pub.
/******************

二、複製公密到服務器

miao@u32-192-168-1-110:~/.ssh$ scp id_rsa.pub miao@192.168.1.112:/home/miao/.ssh/192.168.1.110
miao@192.168.1.112's password: 
id_rsa.pub                                                                   100%  404     0.4KB/s   00:00    
miao@u32-192-168-1-110:~/.ssh$

三、添加公密到192.168.112的信任區域

miao@debian-192-168-1-112:~/.ssh$ cat 192.168.1.110 >> authorized_keys
miao@debian-192-168-1-112:~/.ssh$

注: 二、3兩步可由命令ssh-copy-id一步到位bash

miao@ubuntu-192-168-1-110:~/.ssh$ ssh-copy-id miao@192.168.1.112
#若是錯誤就用 
ssh-copy-id -i ~/.ssh/id_rsa.pub IP
Password:
Now try logging into the machine, with "ssh 'miao@192.168.1.112'", and check in:
  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

四、測試

此時整個步驟已經完成,你能夠嘗試 ssh ip 或者 /etc/hosts 中的主機名試試。服務器

(3)可能遇到的問題

一、在使用 ssh-copy-id 錯誤提示 

ssh-copy-id:/usr/bin/ssh-copy-id: ERROR: No identities foundssh

表現:ide

# 公鑰,私鑰已經生成,執行上述命令完畢出現以下錯誤:工具

$ ssh-copy-id remote-machine

/usr/bin/ssh-copy-id: ERROR: No identities found

解決方法:

g 之發現缺乏公鑰路徑,經過 -i 加上便可:

$ ssh-copy-id -i ~/.ssh/id_dsa.pub user@remote_ip

二、ssh ip 能夠成功登陸,ssh hostname 卻失敗

表現:

ssh hostname

ssh: connect to host localhost port 22: Connection refused

解決方法:

看下對方的主機名是否是在 /etc/hosts 文件中和 ip 作了映射,沒有就加上便可。

三、ssh 的配置目錄權限問題

因爲 ssh 的權限直接關係到服務器的安全問題,所以 ssh 每次讀取配置都會校驗相關文件夾和文件的權限,以防止權限過大對外暴露。

表現:

設置了.ssh目錄,在authorized_keys設置了key後登陸還提示須要輸入密碼。

解決方法:

注意權限,.ssh權限700,authorized_keys權限600,就KO啦!

chmod 700 ~/.ssh/

chmod 600 ~/.ssh/authorized_keys

四、ssh localhost:publickey 受權失敗

sudo vi /etc/ssh/sshd_config

RSAAuthentication yes  
PubkeyAuthentication yes  
AuthorizedKeysFile     .ssh/authorized_keys 

service sshd restart

注:ssh可同時支持publickey和password兩種受權方式,publickey默認不開啓,須要配置爲yes。 
若是客戶端不存在.ssh/id_rsa,則使用password受權;存在則使用publickey受權;
若是publickey受權失敗,依然會繼續使用password受權。
不要設置 PasswordAuthentication no ,它的意思是禁止密碼登陸,這樣就只能本機登陸了!

五、ssh localhost:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

vi /etc/selinux/config  
SELINUX=disabled  

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

最後重啓你的 linux 執行 ssh localhost

六、ssh localhost:須要密碼

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

七、ssh ip 或 hostname 均提示:connection refused

  • 目標主機的ssh server端程序是否安裝、服務是否啓動,是否在偵聽22端口;
  • 是否容許該用戶登陸;
  • 本機是否設置了iptables規則,禁止了ssh的連入/連出;

具體請參考: http://hi.baidu.com/leejun_2005/item/bfc0ded296cb8ebf32db907e

八、kerberos 下 ssh localhost 啓動 hadoop 須要密碼

這個時候編輯 .k5login 添加 host/localhost@58OS.ORG 已經無效,須要在本地建立公鑰與祕鑰。

1. ssh-keygen -t rsa
   # Press enter for each line 
2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. chmod 0755 ~ && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

(4)最後的問題

本文介紹的創建基於免密碼登陸,雙機互信的管理方式簡單、直接,可是安全就是個問題了,稍有不慎容易被一鍋端,建議加上防火牆的端口、ip 策略,有條件的話試試動態口令,這樣會更穩妥些。再有就是當機器規模達到上百、上千臺的時候,若是對文件數據、機器狀態的實時同步、一致性的要求很高的時候,這種管理方式的弊端就出來了。

(5)Refer:

[1]  ssh-copy-id幫你創建信任

http://blogread.cn/it/article/6103?f=wb 

[2]  ssh無密碼登入設置 ssh-keygen ssh-copy-id

http://www.lvtao.net/server/54.html

[3]  一次由SELinux引發的ssh公鑰認證失敗問題

http://www.cnblogs.com/qcly/archive/2013/07/27/3219535.html 

[4] How to ssh to localhost without password?

https://stackoverflow.com/questions/7439563/how-to-ssh-to-localhost-without-password 

相關文章
相關標籤/搜索