第二天作业

一、SSH原理:
        SSH为Secure Shell的缩写,默认端口22,由IETF的网络小组(Network Working Group)所制定;SSH为建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。

        生成公钥和私钥的方法:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-keygen是用于产生密钥的工具。其中参数:

-t:指定生成密钥的类型(rsa、dsa、ecdsa等);
-P:指定passphrase,用于确保私钥的安全;
-f:指定存放私钥的文件,公钥文件默认和私钥同目录,只是公钥的文件名是私钥的文件名加后缀.pub;
会在指定目录生成文件id_rsa和id_rsa.pub,其他文件是在使用过程中过生成,可以修改。其中:

id_rsa:存放私钥;
id_rsa.pub:存放公钥;
known_hosts:存放已认证的远程主机的公钥。连接其他服务端时,生成此文件并将其他服务端的公钥追加到此文件中;
authorized_keys:存放已授权的客户端公钥,可用于客户端免登录。当其他客户端想登录此服务端时,新建该文件并将这些客户端的公钥追加到此文件中就可以免密登录;
config:用于配置要快速访问的服务端的别名等配置信息。可配置多个服务端的相关信息,可使用通配符,如果多次匹配以第一次匹配为准,这样就可以使用ssh 别名 直接登录。详情参考man ssh_config,常用的配置如下:
Host xxx #别名或通配符,匹配的别名将用此配置
    HostName 111.222.33.444 #服务端的ip
    Port 22 #服务端的SSH端口
    User work #要登录服务端的用户名 
    IdentityFile ~/.ssh/id_rsa #要登录服务端的用户的私钥(本地客户端的私钥)
    ControlMaster auto #session共享
    ControlPath ~/.ssh/master-%r@%h:%p #session共享文件的路径
    ControlPersist yes #主连接一直在后台是连接的
    ServerAliveInterval 60 #连接时间间隔
        客户端请求服务端时,客户端会获取服务端的公钥,因为没有像HTTPS那样的CA,所以第一次连接时只能由客户端自己确认公钥是不是正确。

客户端第一次登录服务端时,会提示:无法确认主机xxx.com(xxx.31.18.60)的真实性,不过知道它的公钥指纹(之所以用fingerprint代替公钥,主要是公钥太长(RSA算法生成的公钥有1024位),很难直接比较。所以对公钥进行hash生成一个128位的指纹,这样就方便比较了),是否继续连接?

如果输入yes后,会出现如下提示信息:将该服务器的公钥已添加到know_hosts文件中,然后提示输入密码进行登录。

二、公钥(免密)登录原理 :
        SSH登录时每次都需要输登录密码,很麻烦。SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下:

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是否相同,完成认证过程。


三、SSH远程登录:两台服务器之间免密登录设置

让服务器A实现免密登录自己
1、在A服务器中指定的位置(/root/.ssh)生成私钥id_rsa和公钥id_rsa.pub;
在服务器A操作

cd /root/.ssh
ssh-keygen -t rsa

一路回车键,可看到如下图生成的私钥和公钥,此时服务器A的私钥已经生成。

2、在服务器A中把公钥id_rsa.pub追加到服务器A管理密码登录权限的文件(authorized_keys)中。

cat id_rsa.pub >> authorized_keys

3、此时,服务器A可免密登录服务器器A了。

让服务器A实现免密登录服务器B

1、把服务器A的公钥id_rsa.pub复制到服务器A要免密登录的那台服务器(即B)中的指定位置(/root/.ssh);
在服务器A操作

scp id_rsa.pub 192.168.2.25:/tmp

 

2、在服务器B中把公钥id_rsa.pub追加到服务器B管理密码登录权限的文件(authorized_keys)中。
在服务器B操作

 cd /root/.ssh
 cat /tmp/id_rsa.pub >> authorized_keys

 此时,服务器A的公钥(登录服务器B的权限)追加到服务器B中的权限文件authorized_keys中,服务器A可免密登录服务器器B了。
原因:因为此时服务器B的密码登录权限文件authorized_keys中已经有服务器A的公钥,即A获得了B的登录权限。

让服务器B实现免密登录服务器A

和步骤二是一样的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值