ManagementAndJava的博客

积跬步至千里,操千曲识汝声

Linux开启ssh服务

1. ssh原理

推荐博客:图解SSH原理

作者:TopGun_Viper
链接:https://www.jianshu.com/p/33461b619d53
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 

主要对上文内容做如下注解:

SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。

加密的两种方式:

  1. 对称加密(也称为秘钥加密)
  2. 非对称加密(也称公钥加密)
    对称加密的加密强度高,很难破解。但是在实际应用过程中不得不面临一个棘手的问题:如何安全的保存密钥呢?尤其是考虑到数量庞大的Client端,很难保证密钥不被泄露。一旦一个Client端的密钥被窃据,那么整个系统的安全性也就不复存在。为了解决这个问题,非对称加密应运而生。非对称加密有两个密钥:“公钥”“私钥”
两个密钥的特性:公钥加密后的密文,只能通过对应的私钥进行解密。而通过公钥推理出私钥的可能性微乎其微。

存在中间人攻击风险:

现在使用非对称加密的核心问题变成了:如何对Server的公钥进行认证?在https中可以通过CA来进行公证,可是SSH的publish keyprivate key都是自己生成的,没法公证。只能通过Client端自己对公钥进行确认。

基于口令认证:

通常在第一次登录的时候,系统会出现下面提示信息:

The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)? 

上面的信息说的是:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,不过知道它的公钥指纹,是否继续连接?之所以用fingerprint代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹(fingerprint),这样就方便比较了。

也就是说拿到了服务端返回来的公钥key,需要用户自己确认这个公钥是不是自己的服务端主机发了的公钥,有没有被中间人拦截;

如果输入yes后,会出现下面信息:

Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts. 
Password: (enter password) 

该host已被确认,并被追加到文件known_hosts中,然后就需要输入密码,之后的流程就按照图1进行。

基于公钥认证
在上面介绍的登录流程中可以发现,每次登录都需要输入密码,很麻烦。SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下:

Client自己生成公钥和私钥,比如 puttygen git bash
Client将自己的公钥存放在Server上,追加在文件authorized_keys中(本文件会存放多个客户端的公钥)。Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

2. ssh非对称加密实战

我们通过以下两个示例来对上面所属的内容进行验证

2.1 两个linux系统之间的互联

背景:两台centos系统, 客户端centos6.9 ip地址:192.168.145.120 ;服务端centos7.4 ip地址:192.168.145.110;

2.1.1 在centos6.9上开通sshd服务;

确定虚拟机已经安装openssh-server,在终端输入yum list installed | grep openssh-server

如没有安装使用命令进行安装:

yum install openssh-server

对sshd服务进行配置,配置文件的位置在 /etc/ssh/sshd_config, 设置中用到的关键参数前的#号去掉并做相应的修改即可:

Port  #监听端口 默认22
ListenAddress # 监听地址
PermitRootLogin #运行远程登录
MaxSessions  #最大的连接session数 默认10 
PasswordAuthentication  # 用户密码作为验证链接 

重启服务:

service sshd restart

2.1.2 在客户端centos6.9(192.168.145.120)上生成密钥

ssh-keygen
按照提示:输入存放公钥密钥的位置/root/.ssh/id_rsa
按照提示:输入密码,这里我们设置密码qian123456

此时可以发现在/root/.ssh/下有如下两个文件:

id_rsa     #存放产生的私钥
id_rsa.pub #存放产生的公钥
cat id_rsa.pub
#1024的公钥key如下
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsV0/rduydPp2HSxXAexYZPVKG4d5xrfyv+uJlFz4A5IhSrpoDPSZI525WlzEnYyuGs7xz
OUzbI3Nc81Va0/7rzZyZtP1JY5LYTRA02b3YH+1nokXIsFaqfc1NTcEN2DtoFzy0XfPVLLtnnRHqrEsDlDf49v3sRwQSXbclFh6QPQ7D6
y05VQWbYf2XzoEy4kqiFYoj21ketQytx/OAfzb1dfAINLSZIcOl4ceXGa7FssU63b0rU9Y2NK7Wo/q9w1z0+wGcMvN0pLSeNieet/WmAx
Hvzqw7CmAsEELuuBsecsip67L0puzfVMh7SJtQWqmm7gPWSEM5Fz7rMkByqx/bQ== root@localhost.localdomain

将客户端(120)上产生的公钥发送给服务端(110):

在客服端上使用命令:

ssh-copy-id 192.168.145.110
#根据提示输入登录密码即可

此时在服务端(110)的/root/.ssh/文件下产生如下文件:authorized_keys

cat authorized_keys
#存放的就是刚刚在客户端生成的公钥
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsV0/rduydPp2HSxXAexYZPVKG4d5xrfyv+uJlFz4A5IhSrpoDPSZI525WlzEnYyuGs7xz
OUzbI3Nc81Va0/7rzZyZtP1JY5LYTRA02b3YH+1nokXIsFaqfc1NTcEN2DtoFzy0XfPVLLtnnRHqrEsDlDf49v3sRwQSXbclFh6QPQ7D6
y05VQWbYf2XzoEy4kqiFYoj21ketQytx/OAfzb1dfAINLSZIcOl4ceXGa7FssU63b0rU9Y2NK7Wo/q9w1z0+wGcMvN0pLSeNieet/WmAx
Hvzqw7CmAsEELuuBsecsip67L0puzfVMh7SJtQWqmm7gPWSEM5Fz7rMkByqx/bQ== root@localhost.localdomain

在客户端(120)的/root/.ssh/文件下产生如下文件:known_hosts

注意:此时使用名ssh-copy-id 到服务端是,服务端的ssh配置文件sshd_config中是否允许输入密码项必须为yes。否则客户端连不上服务端

PasswordAuthentication yes

使用ssh远程服务端:

ssh 192.168.145.110
#根据提示输入密码:
#此密码为客户端使用命令ssh-keygen是生成的公钥密码确认执行qian123456 不是服务端root用户的登录密码

2.2.1 putty远程服务端;使用公钥私钥无密码登录:

第一步下载puttygen

第二步生成公钥和私钥:参考生成方式:puttygen生成公钥私钥

注意:生成过程中的key passphase不用写;key comments可以写用户表示自己的公钥;也就是公钥最后一部分内容

第三步将生成的公钥和私钥保存下来;

注意:公钥需要追加到服务端110的/root/.ssh/authrized_keys文件后; 私钥在使用putty连接远程服务端是需要导入到putty Connection SSH Auth下
























阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ManagementAndJava/article/details/80696726
文章标签: ssh
个人分类: Linux
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭