免密登录,顾名思义,以后 SSH 连接上服务器,就不需要密码了。更多是方便一些自动化脚本的使用。比如一键提交代码部署。
# 零、总结
准备工作: 本地机器(serverA) + 一台服务器机子(serverB) (这里机子可以随意)
- 本地机器生成密钥和公钥(id_rsa idrsa.pub)
- 通过 scp 把公钥上传到服务器,然后放到 authorized_keys 文件中
- 设置 ~/.ssh 700 权限 和 ~/.authorized_keys 权限 600 权限
- 本地尝试登录下服务器(不用输入密码则成功)
- 搞定~~
# 一、一步一步来,不要急
# 1. 生成密钥
这里只要执行 ssh-keygen 命令,然后一路回车即可。
╭─zhongxia@zhongxiadeMacBook-Pro.local ~
[zhongxia@serverA ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/zhongxia/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in demo.
Your public key has been saved in demo.pub.
The key fingerprint is:
SHA256:UhMHkGRg9AX2EZfOEIvxrxFvZ9Uy5yPM8tKXPbIisrc zhongxia@zhongxiadeMacBook-Pro.local
The key's randomart image is:
+---[RSA 2048]----+
| .+oB+B+o. |
| . +.*.*. . |
| o B+ + o|
| . =o o. = |
| . S +.o+ ..|
| . + o+ . +|
| . . + +.|
| . o .. + .|
| .+Eo .. |
+----[SHA256]-----+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2. 上传密钥
这里先看一下生成的密钥和公钥,然后在用 scp 上传。
[zhongxia@serverA ~]$ cd ~/.ssh
[zhongxia@serverA ~]$ ls -al
-rw------- 1 zhongxia staff 1.6K 11 1 2016 id_rsa
-rw-r--r-- 1 zhongxia staff 407B 11 1 2016 id_rsa.pub
# 这里的 serverB 换成自己的 ip 地址 或者域名, zhongxia 换成你服务器的用户名
[zhongxia@serverA ~]$ scp ~/.ssh/id_rsa.pub zhongxia@serverB:/home/zhongxia/id_rsa.pub
# 登录下服务器
[zhongxia@serverA ~]$ ssh zhongxia@serverB
# 刚才上传到服务器的公钥文件 >> : 把公钥文件内容追加到 authorized_keys这个文件中(没有这个文件会自动创建)
[zhongxia@serverB ~]$ cat id_rsa.pub >> ~/.ssh/authorized_keys
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 3. 设置 ~/.ssh 和 ~/.ssh/authorized_keys 的权限
SSH 免密登录,authorized_keys 文件的权限必须为 600,ssh 目录权限必须为 700,手动修改权限
[zhongxia@serverB ~]$ chmod 700 ~/.ssh
[zhongxia@serverB ~]$ chmod 600 ~/.ssh/authorized_keys
1
2
2
# 4. 免密登录测试
ssh zhongxia@serverB
# Last login: Sun Nov 18 14:53:37 2018 from xxx.xxx.xxx.xx
# Welcome to Alibaba Cloud Elastic Compute Service !
1
2
3
4
2
3
4
搞定~~~
# 二、可能遇到的问题
一路没有碰到问题,自然是好,但是往往有时候,错误总是来的那么突然。
# 提供两个定位错误的方式
# 1. 先用密码登录服务器,查看安全日志
su tail -f /var/log/secure
# 2. 在本机机器,使用 ssh的日志
ssh -vvv zhongxia@serverB
1
2
3
4
5
6
2
3
4
5
6
# 1. SSH Authentication Refused: Bad Ownership or Modes for Directory
使用方式 1 定位问题,你可能发现,日志中有这个错误,有的话, 问题就是 ssh 目录 和 authorized_keys 没有设置好。 认真在检查检查, 如果还是报错的话。 参考下《这篇文章》
# 2. pam_unix(sshdsession) session closed for user
使用方式 1 定位,上个问题搞定了,你可能发现还有这个问题。
这个问题,我在实现免密登录的时候,发现是因为我本地有多个密钥,不同的服务器使用不同的密钥,然后没有配置好 serverB 服务器使用的密钥,导致这个问题。
如果是你本机也是有很多个密钥,那么就检查你不同服务器配置不同密钥的方式是不是对的。 不想检查的话,就把本机 id_rsa.pub 的公钥扔到服务器即可。
在阿里云社区找到 这边文章《SSH 连接时出现如下错误:pam_unix(sshdsession) session closed for user》, 用户修改了默认的shell导致。
cat /etc/passwd | grep user_name
test:x:1000:1000::/home/user_name:/sbin/nologin
1
2
2