前言
ssh有密碼登錄和證書登錄块蚌,密碼登錄,特別是外網(wǎng)的機器彬檀,很容易遭到攻擊晶密。真正的生產(chǎn)環(huán)境中,ssh登錄還是證書登錄秀鞭。目前在使用ansible配置管理其他機器時宰睡,推薦要求機器間采用證書登錄,實現(xiàn)無密碼跳轉(zhuǎn)气筋。
證書登錄步驟
- 生成證書:私鑰和公鑰拆内,私鑰存放在客戶端,必要時為私鑰加密宠默;
- 服務器添加信用公鑰:把生產(chǎn)的公鑰麸恍,上傳到ssh服務器,添加到指定的文件夾中搀矫;
- 配置開啟允許證書登錄抹沪,客戶端就能通過私鑰登錄ssh服務器了。
實例配置
- 生成私鑰和公鑰
#rsa或者dsa加密算法瓤球,這里采用rsa
ssh-keygen -t rsa
#如果一路回車默認生成id_rsa和id_rsa.pub融欧,前者是私鑰,放在客戶端卦羡,后者是公鑰噪馏,需要放在ssh服務器
- 例如在客戶端生成的公鑰,需要將公鑰拷貝到服務器上
#拷貝公鑰到ssh服務器
# scp <本地私鑰path> username@ip:<path>
# 還沒配置完成绿饵,交互方式還是傳統(tǒng)的用戶名和密碼吧
scp id_rsa.pub vagrant@10.45.47.54:~
scp lch_key.pub vagrant@10.45.47.55:~ && ssh vagrant@10.45.47.55 "cat ~/lch_key.pub >> ~/.ssh/authorized_keys"
- 服務端將公鑰添加到authorized_keys
#authorized_keys一般在~/.ssh/目錄下欠肾,沒有可以新建,也可以后面改sshd_config配置文件拟赊,指向其他路徑
#追加公鑰到文件末尾
cat id_rsa.pub >> ~/.ssh/authorized_keys
- 其他配置項刺桃,注意服務端配置的是sshd_config,客戶端配置的是ssh_config
- 服務端sshd_config配置
vi /etc/ssh/sshd_config
# 這里指定公鑰的目錄
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
- 客戶端ssh_config配置
vi /etc/ssh/ssh_config
#添加私鑰路徑
#如果存在多個可以再次添加
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/rat_rsa
- 執(zhí)行登錄
#客戶端如果沒有配置私鑰路徑,可以在ssh后-i參數(shù)跟上私鑰路徑
#ssh user@ip 完成登錄
ssh vagrant@10.45.47.54
- 其他注意
- ssh登錄時可以添加-v參數(shù)打印登錄的詳細信息吸祟;
- 服務端的
~/.ssh
下面只能自己有讀寫權限瑟慈,其他用戶和用戶組不能有寫權限桃移,至少要600,這個問題遇到過葛碧,配置了公鑰和私鑰借杰,但是客戶端就是不能登錄,最后排查發(fā)現(xiàn)服務端的用戶主目錄曾被改過目錄吹埠,但是用戶的主目錄有用戶組的寫權限導致客戶端怎么都不能以證書方式登錄第步,最后chmod g-w ~
搞定