绝大多数情况下,我们都是通过ssh登录到云主机的,这个命令就是最最常规的ssh方式登录

1
ssh username@hostname

但一般地,线上主机多多少少会有一些额外的登录限制(当然,还是出于安全性的考虑)。常见的限制包括,限制从某些主机登录,限制用ssh密钥而不允许用密码登录等,这篇博客说说如何来配置后一种限制。

1. 配置ssh免密码登录

这一步除了安全性因素外,其实懒也占了挺大一块的,ssh登录在后期是要大量使用的,每次输入密码真的太麻烦,所以在这里配置下ssh免密码登录。

它的原理也很简单,假设要从A机器登录B机器,默认地会要求输入B机器的密码,但如果B机器上有A机器的公钥,就可以跳过这个步骤。所以我们要做的,就是在A机器上生成密钥对,并将其中的公钥提供给B机器。

1.1 在A机器上生成ssh密钥对
1
ssh-keygen -t rsa

运行后一路回车,即可在~/.ssh目录下生成id_rsa和id_rsa.pub两个文件,其中带.pub后缀的就是公钥,另一个是私钥,千万不能泄露哦!

1.2 将公钥传输到B机器
1
scp ~/.ssh/id_rsa.pub username@hostname:~/

其中的username是B机器的用户名,hostname是B机器的主机名或IP地址,这时还是要输入密码的。

1.3 使B机器信任A机器的公钥
1
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

这里补上后来学到的另一种方案,可以用ssh-copy-id代替scp手动复制文件、cat重定向公钥(即1.2、1.3步)

1
ssh-copy-id username@hostname

1.4 配置权限

这一步网上的说法也是必须的,虽然一开始我没有配置这一步也没有出错,但是仔细想想出于安全性的考虑还是做一下为妙。所要完成的任务就是把B机器的.ssh目录权限设置成700(仅用户本人可以读、写、访问), authorized_keys文件权限设置成600(仅用户本人可以读、写)。

1
2
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

行了!试一下,在A机器上直接ssh username@hostname不再需要输入密码就直接登录了。

2. 关闭密码登录

上一步实现了ssh密钥登录,即快捷又方便,那么自然就可以关闭密码登录了。vim打开/etc/ssh/sshd_config文件,找到并修改下面2行

1
2
PubkeyAuthentication yes
PasswordAuthentication no

然后重启一下sshd

1
service sshd restart

搞定!现在再想使用密码登录会告诉你,不行!安全性进一步提高了。