简介

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能,SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,与TELNET(远程登录,明文传递)等应用相比,SSH协议提供了更好的安全性

对称加密算法

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。加密和解密是一样的,例如密码123,都是明文,用户密码并不多,有可能其他数据密码也用这个密码,一旦截获,直接可以使用。没有安全性可言。

非对称加密算法

非对称加密算法(asymmetric cryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey),其特点加密速度慢、安全
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
用户A利用工具使用密码生成一个公钥和私钥,用户B亦是如此;公钥是一把锁,私钥是一把钥匙。现在要加密一个文件,此时文件想给用户B查看,要将B的公钥下载下来,把文件加密,把文件再传递给用户B,用户B可以用自己私钥和密码打开,互相不需要知道对方的密码就可以打开,保护密码安全

实验环境

  • 系统环境:centos6.5
  • SSH服务器端:192.168.1.77
  • SSH客户端: 192.168.1.20

搭建步骤:

一、准备工作

1、服务器端、客户端关闭防火墙、Selinux

[root@redhat6 ~]# vim /etc/sysconfig/selinux

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

[root@redhat6 ~]# chkconfig iptables off #开机启动关闭防火墙
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

二、ssh服务结合PAM认证提高服务器安全性

1、服务器端编辑ssh主配置文件

[root@redhat6 ~]# vim /etc/ssh/sshd_config
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

解析参数:
Port 22 //服务的默认端口
ListenAddress 0.0.0.0 //监听的IP地址,其实是监听的网卡,在哪一个网卡上面提供这么一个远程连接,也就是通过监听哪个IP过来ssh的访问,没有写IP,不允许ssh访问
Protocol 2 //使用的是ssh协议的第二版本,2代表版本号
HostKey /etc/ssh/ssh_host_rsa_key //私钥保存位置,有两种模式rsa,dsa; 公钥是从服务器传递给客户端的
ServerKeyBits 1024 //私钥的位数
SyslogFacility AUTH //日志记录SSH登录情况
LogLevel INFO //日志等级
GSSAPIAuthentication yes //GSSAPI认证开启,GSSAPI是要经过DNS服务器验证,此时还没有搭建服务器,开启此参数就要等很长时间,DNS来解析主机名,搜索其他DNS服务器,一般情况下,关闭客户端,服务器端未必掌控,改掉之后很快就会让你输入密码
PermitRootLogin yes //允许root用户登陆
PubkeyAuthentication yes //是否使用公钥验证
AuthorizedKeysFile .ssh/authorized_keys //公钥保存位置,.ssh是该用户家目录下的.ssh
PasswordAuthentication yes //允许使用密码验证登陆
PermitEmptyPasswords no //不允许空密码登陆
LoginGraceTime 2m //超时,等待两分钟如果不输入密码就会关掉
MaxAuthTries 6 //最大的认证次数,输入用户名、密码错误,最多能输出多少次
AllowUsers //仅允许某用户能够访问(白名单)
DenyUsers //仅拒绝固定用户登录(黑名单)

[root@redhat6 ~]# /etc/init.d/sshd restart #重新启动ssh服务

2、添加测试用户

[root@redhat6 ~]# useradd zhangsan
[root@redhat6 ~]# passwd zhangsan
[root@redhat6 ~]# useradd lisi
[root@redhat6 ~]# passwd lisi

3、客户端远程登录测试

[root@Init5 ~]# ssh root@192.168.1.77
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
[root@Init5 ~]# ssh lisi@192.168.1.77
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

[root@Init5 ~]# ssh zhangsan@192.168.1.77
[zhangsan@redhat6 ~]$ ifconfig

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

4、使用su命令切换root身份

[zhangsan@redhat6 ~]$ su - root
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

5、服务器端开启PAM认证

[root@redhat6 ~]# gpasswd -a zhangsan wheel #将zhangsan用户添加到wheel组中
[root@redhat6 ~]# id zhangsan

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

[root@redhat6 ~]# vim /etc/pam.d/su #开启su命令支持的PAM模块认证
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

6、修改服务器端配置文件并测试

[root@redhat6 ~]# vim /etc/ssh/sshd_config
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

[root@redhat6 ~]# /etc/init.d/sshd restart #重启ssh服务
[root@Init5 ~]# ssh zhangsan@192.168.1.77 #zhangsan用户访问服务器

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

[root@Init5 ~]# ssh lisi@192.168.1.77 #lisi用户访问服务器

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

三、通过密钥对认证登录

1、服务器端编辑配置文件

[root@redhat6 ~]# vim /etc/ssh/sshd_config
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

[root@redhat6 ~]# /etc/init.d/sshd restart

2、客户端zhangsan用户生成秘钥对、并上传服务器端

[root@Init5 ~]# su - zhangsan #切换zhangsan用户

[zhangsan@Init5 ~]$ ssh-keygen -t rsa #生成公、私钥

ssh-keygen:生成、管理和转换认证密钥对,它支持RSA和DSA两种认证密钥
-t:指定要创建的密钥类型
rsa:秘钥的算法类型

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

[zhangsan@Init5 ~]$ cd .ssh/
[zhangsan@Init5 .ssh]$ ls

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
[zhangsan@Init5 .ssh]$ ssh-copy-id -i id_rsa.pub lisi@192.168.1.77 #上传公钥至服务器端~/.ssh目录下

ssh-copy-id:可以把本地主机的公钥复制到远程主机的authorized_keys文件上
-i:指定公钥文件

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

3、服务器端查看上传公钥

[root@redhat6 ~]# cd /home/lisi/.ssh/
[root@redhat6 .ssh]# cat authorized_keys

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

四、测试客户端访问服务器端

1、使用公钥密码登录

[root@Init5 ~]# su - zhangsan
[zhangsan@Init5 ~]$ ssh lisi@192.168.1.77 #远程登录lisi用户
[lisi@redhat6 ~]$ ifconfig

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

2、设置ssh代理功能实现免密登录

[root@Init5 ~]# su - zhangsan
[zhangsan@Init5 ~]$ ssh-agent bash #密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程,不需要重新输入密码
[zhangsan@Init5 ~]$ ssh-add #将私钥添加到ssh代理中
[zhangsan@Init5 ~]$ ssh lisi@192.168.1.77 #连接服务器

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录

3、将私钥文件导入windows远程连接工具登录

[root@redhat6 .ssh]# vim /etc/ssh/sshd_config #修改主配置文件
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
[root@redhat6 .ssh]# /etc/init.d/sshd restart #重启sshd

详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录
详解ssh通过公钥密码、免密码登录以及导入公钥文件三种形式实现远程登录