SSH及登录

简介

  • SSH(Secure Shell)是一个提供数据通信安全、远程登录、远程指令执行等功能的安全网络协议,由芬兰赫尔辛基大学研究员Tatu Ylönen,于1995年提出,其目的是用于替代非安全的Telnet、rsh、rexec等远程Shell协议。
  • SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的 Shell 提供安全的传输和使用环境。
  • 本文介绍SSH-2

连接的建立

  1. client连接到server上
  2. client和server交换自己支持的SSH协议版本号
  3. client和server切换到基于报文的协议
  4. server向client提供自己的身份证明和会话参数
  5. client给server发送一个(会话)密钥
  6. 双方启用加密并完成服务器认证
  7. 建立安全连接
    从非对称加密改为对称加密

认证方式(身份证明)

密码认证
  1. ssh client向目标机器发起tcp连接(一般22端口)并发送username (username是SSH协议的一部分)
  2. 目标机器ssh daemon回应需要密码
  3. ssh client提示用户输入密码,然后将密码发送到服务器端
  4. ssh daemon如果密码匹配成功, 则认证通过
公钥认证
  1. ssh client向目标机器发起tcp连接(一般22端口)
  2. ssh client提示用户输入passphrase以解密私钥
  3. ssh client发送私钥签名的包含username和公钥等信息的message.
  4. 目标机器ssh daemon通过检查消息中指定用户的$HOME/.ssh/authorized_keys,确定公钥是否可用作认证并验证签名的合法性, 如果两者都ok, 则通过认证
使用ssh agent的公钥认证
  1. ssh client向目标机器发起tcp连接(一般22端口)
  2. ssh client向本地的agent请求, 得到私钥签名的包含username和公钥等信息的message
  3. ssh client向目标机器发送此message和签名
  4. 目标机器ssh daemon通过检查消息中指定用户的$HOME/.ssh/authorized_keys,确定公钥是否可用作认证并验证签名的合法性, 如果两者都ok, 则通过认证
使用ssh agent forwarding的公钥认证
  1. client: 假设用户已经从client连接到了第一台机器server。client的agent中已保存了用户的私钥
  2. server: 用户从server向server2发起ssh连接请求
  3. server: client向本地(server)的agent请求, 得到私钥签名的包含username和公钥等信息的message。
  4. server: client向目标机器server2发送此message和签名
  5. server2: ssh daemon通过检查消息中指定用户的$HOME/.ssh/authorized_keys,确定公钥是否可用作认证并验证签名的合法性, 如果两者都ok, 则通过认证

其中在第3步中:
注意server上其实ssh-agent压根就没有启动,ssh client只是检查$SSH_AUTH_SOCK这个环境变量是否存在,如果存在,则和这个变量指定的domain socket进行通信。而这个domain socket其实是由server上的sshd创建的。所以ssh client其实是和sshd在通信。
而server的sshd并没有私钥信息,所以sshd做的事情其实是转发该请求到本地的ssh client,再由该client将请求转发给本地的agent。该agent将需要的消息和签名准备完毕后,再将此数据按原路返回到server的ssh client

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值