SSH原理以及使用方式

How to use ssh to connect server?

最近和朋友讨论到了如何使用ssh连接服务器,一时兴起,感觉自己也确实只会用其中一些简单的命令,所以就抽空整理了下该篇文章,该文章参考了许多网上的资源,最后以我自认为比较简单明了的方式作出此文,时间原因,后面会补充一个过程图。

一、ssh是什么?

SSH 为 Secure Shell的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital、 UNIX、Irix,以及其他平台,都可运行SSH。

二、ssh可以做什么?

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。

三、ssh的原理

3.1 验证方式

从客户端的角度来说,ssh提供两种级别的安全验证,分别是基于口令的安全验证和基于密钥的安全验证。

  • 基于口令的安全验证

    ​ 口令,也就是一般来讲我们说的密码,只要知道服务ip、账号以及密码,就可以登录远程主机。所有的传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

  • 基于密钥的安全验证

    ​ 需要依靠密钥,也就是你必须为自己创建一对密钥,并把公用密钥(公钥)放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下(.ssh)寻找你的公用密钥,然后把它和你发送过来的公用密钥进行比较。如果两个密匙一致,服务器就用公用密钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密钥解密再把它发送给服务器。

    用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种方式不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙),但是整个登录的过程可能需要10秒。

3.2 验证过程

ssh的登录过程分为5个阶段

1、版本号协商阶段

2、密钥和算法协商阶段

3、认证阶段

4、会话请求阶段

5、会话交互阶段

主要就如下三个阶段:

  • 1、版本号协商阶段

    • 服务端打开端口22,等待客户连接。
    • 客户端向服务端发起TCP连接,连接建立后,服务端向客户端发送第一个报文,包括版本标志字符串,格式为“协议版本号 次协议版本号 软件版本号”。
    • 客户端收到报文后,解析协议版本号,如果服务端的协议版本号比自己的低,且客户端能支持服务端的低版本,就使用服务端的协议号,否则使用自己的协议版本号。
    • 客户端回复服务端一个报文,包含了客户端决定使用的协议版本号。
    • 服务端比较客户端发过来的版本号,决定是否能同客户端交互。
    • 如果协商成功,就进入密钥和算法协商阶段。否则服务端断开TCP连接。
  • 2、密钥和算法协商阶段

    • 服务端和客户端分别发送算法协商报文给对方,报文中包含自己支持的公钥算法列表、加密算法列表、消息验证码算法列表、压缩算法列表等。
    • 服务端和客户端根据对方和自己支持的算法得出最终使用的算法。
    • 服务端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话ID。
      • c公 客户端公钥
      • c密 客户端密钥
      • s公 服务端公钥
      • s密 服务端密钥
    • 在版本号协商阶段完成后:
      • 服务端将 s公 发送给客户端。
      • 服务端生成会话ID ,设为 id ,发送给客户端。
      • 客户端生成会话密钥,设为 key ,并计算 res = (id 异或 key)。
      • 客户端将 res 用 s公 进行加密,将结果发送给服务端。
      • 服务端用 s密 进行解密,得到 res。
      • 服务器计算 res 异或 id,得到 key。
      • 至此服务端和客户端都知道了会话密钥和会话ID,以后的数据传输都使用这个会话密钥进行加密和解密。
  • 3、认证阶段

    • 基于账号和口令的验证方式:

      • 客户端使用密钥和算法协商阶段生成的会话密钥加密账号、认证方法、口令,将结果发送给服务器。

      • 服务端使用获得的会话密钥解密报文,得到账号和口令。

      • 服务端对这个账号和口令进行判断,如果失败,向客户端发送认证失败报文,其中包含了可以再次认证的方法列表。

      • 客户端从认证方法列表中选择一种方法进行再次认证。

      • 这个过程反复进行,直到认证成功或者认证次数达到上限,服务端关闭本次TCP连接。

    • 基于公钥和私钥的验证方式:

      • 使用ssh-keygen程序生成公钥 id_dsa.pub 和私钥 id_dsa,一般是在客户端上生成,然后把 id_dsa.pub 通过某种方式发送给服务端。

      • 服务端放在将要远程登录过来的那个账号的目录的.ssh目录下面。

      • 客户端使用密钥和算法协商阶段生成的会话密钥加密账号、认证方法、id_dsa.pub,将结果发送给服务端。

      • 服务端使用会话密钥解密报文,得到账号、id_dsa.pub。

      • 服务端在这个账号的目录的.ssh目录下找对应的公钥,如果没有找到,发送失败消息给客户端,如果找到,比较客户发送过来的这个公钥和找到的公钥,如果内容相同,服务端生成一个随机的字符串,简称“质询”,然后使用找到的公钥加密这个质询,然后使用会话密钥再次加密。

      • 服务端把这个双重加密的数据发送给客户端。

      • 客户端使用会话密钥解密报文,然后使用id_dsa再次解密数据,得到质询。

      • 客户端使用会话密钥加密质询,发送给服务端。

      • 服务端使用会话密钥解密报文,得到质询,判断是不是自己生成的那个质询,如果不相同,发送失败消息给客户端,如果相同,认证通过。

四、ssh的命令使用

4.1 简单的基于口令的验证

ssh user@remote [-p port]

4.2 简单的基于密钥的验证

ssh -i secretkey user@remote [-p port]

4.3 配置别名来认证

​ 如果服务器比较多的时候,我们就可以配置别名来连接服务器。

在客户端下的  ~/.ssh/config 文件中追加下服务器相关内容,
* 格式:
    Host serverName
            HostName remote-ip
            [IdentityFile secrePath]
            User    userName
            Port port
* 解释:
        Host 服务器别名
            HostName 远程ip地址
            [IdentityFile 密钥文件地址(如果使用密钥来验证的话)]
            User    账号名称
            Port 端口号
* 例如:
    Host centos
          HostName xxx.xxx.xxx.xxx
          User user
          Port port
保存之后就可以直接使用 ssh centos来登录。

注:如果没有config文件的话可以新建一个。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容