记·SSH密钥免密登录配置


内容纲要

开启自嘲~

作为一名Java Web程序员,免不了要跟服务器打交道。平时自己在Linux系统上学习是习惯性的使用密码,对于服务器,安全很重要,通常是通过密钥来管理服务器。

处于安全考虑,一般是在客户端生成公钥和私钥,然后将公钥配置到服务器端。

远程ssh连上server,su – 到root,通过以下命令编辑sshd服务配置:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 修改前先备份
vim /etc/ssh/sshd_config

 

修改点:

1. PermitRootLogin no # 禁止root通过ssh登录

2. RSAAuthentication yes # 开启RSA验证

3. PubkeyAuthentication yes # 开启公钥验证

4. AuthorizedKeysFile .ssh/authorized_keys # 指定公钥存储文件

5. PermitEmptyPasswords no # 禁止空密码登录

6. PasswordAuthentication no # 禁止通过密码登录

7. ChallengeResponseAuthentication no # 开启密钥方式的同时禁止密码登录

第7点如果设置为yes,哪怕1~6都按照以上设置了,客户端依然可以通过密码登录。

附上完整配置:

本菜鸟的操作系统是Fedora 27,所以在终端ssh的时候必须指定私钥,不然是会报错的。

以上讲完了server端的sshd配置,下面就需要在客户端生成公钥和私钥了。

通过以下命令生成:

cd ~
ssh-keygen -b 4096 -t rsa -C rtfsc8 -f .ssh/cbd-rtfsc8

在当前用户的~/.ssh/目录下生成了两个文件:

cbd-rtfsc8        # 私钥文件,本地登录server使用

cbd-rtfsc8.pub # 公钥文件,上传到server

在terminal输入以下命令:

scp-copy-id -i ~/.ssh/cbd-rtfsc8.pub rtfsc8@dev.rtfsc8.top

或者

scp ~/.ssh/cbd-rtfsc8.pub rtfsc8@dev.rtfsc8.top:~/.ssh/
cat ~/.ssh/cbd-rtfsc8.pub >> ~/.ssh/authroized_keys

或者 在server端直接编辑并粘贴公钥内容

vim ~/.ssh/authroized_keys

第1、2种需要输入密码,第3种直接编辑,任选一种即可。

另,还有个权限问题:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/*

以上都执行成功后,重启sshd服务:

systemctl restart sshd.service # Fedora 27 | CentOS 7
service sshd restart # CentOS 5/6

此时在客户端的terminal运行ssh:

ssh  -i  ~/.ssh/cbd-rtfsc8  rtfsc8@dev.rtfsc8.top

密钥如果设置了密码,此处输入密钥密码即可,若未设置则免密登录。

不指定密钥则无法登录server。

 

ssh_exchange_identification: read: Connection reset by peer

碰到这种情况,请在server端检查拒绝连接的ip列表里是否包含你的外网IP地址:

cat /etc/sshd.deny.hosteye | grep 外网IP

删除该IP并保存文件,在客户端再次执行连接命令即可。

 

ssh rtfsc8@dev.rtfsc8.top

执行以上命令出现如下提示:
rtfsc8@dev.rtfsc8.top: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

说明server端已经配置了密钥登录,需要指定私钥文件。

声明:
  未经特别说明,本站Blog均采用署名-非商业性使用-禁止演绎 2.5 中国大陆授权。任何违反本协议的行为均属于非法行为。如需非商业性转载,请保留署名。如需商业性转载出版,请直接和联系。


发表回复

您的电子邮箱地址不会被公开。