一、免密登錄設置
1、使用root用戶登錄,進入到目錄/root/.ssh
2、執行命令:ssh-keygen -t rsa
一路回車,完成后會在目錄/root/.ssh下面生成文件 id_rsa和id_rsa.pub
3、將公鑰寫入文件authorized_keys:cat id_rsa.pub >> authorized_keys
4、重復1、2、3,直到要免密登錄的所有機器都生成了id_rsa和id_rsa.pub文件和authorized_keys
5、將其他機器的公鑰拷貝到第一台機器authorized_keys文件中:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip
6、將第一台機器的authorized_keys復制到其他機器
scp /root/.ssh/authorized_keys ip:/root/.ssh/
提示報錯:Permission denied, please try again.
可能原因:
1、目錄或文件沒有寫權限(默認不會),解決:chmod 700 .ssh chmod 644 authorized_keys
2、ssh服務需要修改下配置,解決:
修改目標服務器的/etc/ssh/sshd_config中的PermitRootLogin 為 yes ,然后重啟ssh(systemctl restart sshd.service)
7、驗證(第一次需密碼)
ssh ip
注:上述實現了root用戶之間的免密操作,如果要實現其他用戶,則使用其他用戶登錄,進行上述操作,生成的密鑰文件會在用戶目錄下的.ssh下。
如果已經實現了一個用戶免密,要實現其他用戶免密,可以將實現免密的用戶下的.ssh目錄下的文件拷貝到其他用戶下即可。
二、常見錯誤
一般為了方便運維管理都會配置ssh免密登錄,ssh免密登錄實現也很方便。今天遇到一個完成了配置了卻不能生效的問題。
遇到這個問題一般有以下幾點:
- authorized_keys文件是否啟用
- .ssh 和 authorized_keys 文件權限問題
檢查AuthorizedKeysFile配置是否啟用authorized_keys
···bash
root@pts/1 $ cat /etc/ssh/sshd_config |egrep AuthorizedKeysFile
AuthorizedKeysFile .ssh/authorized_keys
沒有問題,繼續檢查.ssh (700) 和 authorized_keys(644) 權限
```bash
root@pts/1 $ getfacl /root/.ssh/
getfacl: Removing leading '/' from absolute path names
# file: root/.ssh/
# owner: root
# group: root
user::rwx
group::---
other::---
root@pts/1 $ getfacl /root/.ssh/authorized_keys
getfacl: Removing leading '/' from absolute path names
# file: root/.ssh/authorized_keys
# owner: root
# group: root
user::rw-
group::---
other::---
authorized_keys 權限不對,修改一下chmod 644 authorized_keys
再次嘗試結果發現還是不行。但是該設置的權限都設置了。既然.ssh目錄和其下文件的權限都OK了,那就檢查下其父目錄的權限,也就是這里的/root的權限
root@pts/1 $ getfacl /root/
getfacl: Removing leading '/' from absolute path names
# file: root/
# owner: ftpuser
# group: ftpuser
user::r-x
group::r-x
other::---
發現這里/root 的屬主都發生了變化。為了不影響別的業務情況,保留這里的ftpuser權限,利用setfacl添加特殊ACL權限
root@pts/1 $ chown -R root:root /root/
root@pts/1 $ setfacl -m u:ftpuser:rwx /root/
root@pts/1 $ getfacl /root/
getfacl: Removing leading '/' from absolute path names
# file: root/
# owner: root
# group: root
user::rwx
user:ftpuser:rwx #effective:r-x
group::r-x
mask::r-x
other::r-x
附加
權限問題
- /root 775
- /root/.ssh 700
- /root/.ssh/authorized_keys 644
- 開啟文件AuthorizedKeysFile .ssh/authorized_keys
三、CentOS7再ssh-copy-id時的錯誤
1、在幾台主機搭好環境后,centos7系統,幾台機器全部執行了ssh無密碼操作后,由於
IP的問題而需要為某一台服務器重新配置IP,也就是換了一個IP但是主機名並沒有改變,
ssh-copy-id dgb@ceph1 時就報了以下的錯誤
/bin/ssh-copy-id: ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: The ECDSA host key for ceph-admin has changed,
ERROR: and the key for the corresponding IP address 192.168.0.10
ERROR: is unknown. This could either mean that
ERROR: DNS SPOOFING is happening or the IP address for the host
ERROR: and its host key have changed at the same time.
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: 6e:77:fc:47:14:4c:98:46:c8:c8:49:01:a8:fe:83:ee.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /home/dgb/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/dgb/.ssh/known_hosts:4
ERROR: ECDSA host key for ceph-admin has changed and you have requested strict checking.
ERROR: Host key verification failed.
解決辦法其實在報錯信息中已經存在了:
ERROR: Add correct host key in /home/dgb/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/dgb/.ssh/known_hosts:4
查看/home/dgb/.ssh/known_hosts這個文件,里面是:
ceph-admin,192.168.0.10 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZgBm7r+RNOhGby8l+D57bXr/f1k055AlrlJcjlUQO9CMkNFZLGE32fcREG3EtmmrdPxlUXMX+ajzkaYbEa1rs=
ceph1,192.168.0.11 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZgBm7r+RNOhGby8l+D57bXr/f1k055AlrlJcjlUQO9CMkNFZLGE32fcREG3EtmmrdPxlUXMX+ajzkaYbEa1rs=
ceph2,192.168.0.12 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZgBm7r+RNOhGby8l+D57bXr/f1k055AlrlJcjlUQO9CMkNFZLGE32fcREG3EtmmrdPxlUXMX+ajzkaYbEa1rs=
ceph3,192.168.0.13 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFZgBm7r+RNOhGby8l+D57bXr/f1k055AlrlJcjlUQO9CMkNFZLGE32fcREG3EtmmrdPxlUXMX+ajzkaYbEa1rs=
ceph4,192.168.0.14 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDhXt1f/8evGZ4U7RBqV8bRi6O/ZcZvmWjPyZA6HQsFQF9M0Y2Usq3VvTW46dWaaNRMpRbwzmUYLwADV/RsXm1c=
ceph-rgw2,192.168.0.30 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFlk04wCYYRhNqPrGlyUt7OTPhE1yU33+CWo1iTXJj7c+aU87z2saGGnTqCylQmz+yAdO7vMPGsIin5GqxODnkA=
找到以前的IP並且刪除,然后再做ssh-copy-id操作即可。