天天看点

SSH远程连接与加密技术

   数据加密算法通常可以分为三类:对称加密;非对称加密;单向加密。先对它们的区别与作用作说明

    1、对称加密算法

    所谓对称加密算法就是加密和解密使用同一个密钥。其基本算法有DES、3DES、AES等。特性:加密、解密使用同一个密钥;将原始数据分割成固定大小的块,逐个进行加密。缺陷:密钥过多;密钥分发。

    2、非对称加密

    密钥是成对出现。实现算法有RSA, DSA, ELGama等。公钥(pubkey):公开给所有人;私钥(secret key):自己留存,必须保证其私密性。特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然。其主要应用场景有:

    数字签名:主要在于让接收方确认发送方身份;

    密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;

    数据加密:由于加密数据时间缓慢,一般不用来加密数据。

    3、单向加密

    其基本算法有:MD5,SHA1等。特点:只能解密,不能解密;可用于提取数据指纹;定长输出、雪崩效应(即数据内容的一丁点改变,可能造成输出结果的巨大变化)。

二、openssl的使用

    openssl是用于实现加密的工具。其内部集成了大多数加密算法的实现。现在对其基本用法做一个说明。

    1、对称数据加密

1

<code>使用des3算法,加密 </code><code>fdisk</code><code>.sh文件数据,加密后的文件数据存放入code.</code><code>file</code><code>中</code>

2

3

4

5

6

7

8

9

10

11

12

<code>[root@mylinux home]</code><code># openssl enc -des3 -a -salt -in fdisk.sh -out code.file;加密</code>

<code>enter des-ede3-cbc encryption password:</code>

<code>Verifying - enter des-ede3-cbc encryption password:</code>

<code>[root@mylinux home]</code><code># cat fdisk.sh </code>

<code>qeqweqeq</code>

<code>[root@mylinux home]</code><code># cat code.file </code>

<code>U2FsdGVkX1+JUB</code><code>/kio926cofroD0rRypfUcYmh</code><code>+eIho=</code>

<code>[root@mylinux home]</code><code># openssl enc -d -des3 -a -salt -in code.file -out fdisk2.sh;解密</code>

<code>enter des-ede3-cbc decryption password:</code>

<code>[root@mylinux home]</code><code># cat fdisk2.sh </code>

<code>[root@mylinux home]</code><code>#</code>

    2、单向加密

<code>一般用于提取文件的特征码,文件数据的微小改变会造成雪崩效应。</code>

<code>[root@mylinux home]</code><code># cat fdisk.sh qeqweqeq</code>

<code>[root@mylinux home]</code><code># openssl dgst -md5 fdisk.sh </code>

<code>MD5(</code><code>fdisk</code><code>.sh)= 44892aaa22ea31022cf8af4e0521e3ff</code>

<code>[root@mylinux home]</code><code># echo "qeqweqee" &gt;fdisk.sh </code>

<code>[root@mylinux home]</code><code># cat fdisk.sh               </code>

<code>qeqweqee</code>

<code>MD5(</code><code>fdisk</code><code>.sh)= bb123d0f209942acdb0d640c3e1c32f3</code>

    3、非对称加密

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<code>主要用于密钥交换(对方的公钥)、数据加密(对方的公钥)、身份认证(自己的私钥)</code>

<code>[root@mylinux home]</code><code># openssl genrsa -out rsa.key;生成私钥</code>

<code>Generating RSA private key, 1024 bit long modulus</code>

<code>.....++++++</code>

<code>............................++++++</code>

<code>e is 65537 (0x10001)</code>

<code>[root@mylinux home]</code><code># cat rsa.key </code>

<code>-----BEGIN RSA PRIVATE KEY-----</code>

<code>MIICWwIBAAKBgQDPGeA1ir63tb4C8TkRUvEvoQkPMk2NE5389ErMtCB7t4Njif7A</code>

<code>VVTWn1zC</code><code>/WWHfwaWfRb4fNdMCyv0aLPRvMCfw8TKTd6thlD0WJ5nIYAWyOA4XN2A</code>

<code>Jz1o80</code><code>/iMMkdx1TBju5sjvvOPRYRVeBsta/x/hsDyo3F</code><code>+OSHSmgBqDVv3QIDAQAB</code>

<code>AoGAIRbKSuOzGxkPldrCunDdFjYNg38PAvZabLr</code><code>/ZHt3IS0t8e5vZH19w5jMsl7Y</code>

<code>JPD3tX2g+OzBXWX</code><code>/jNpZuK4GvHY2GMNRbI0cwQTtr5oNEBFCmdeO9gETVglcLmwN</code>

<code>SgDQSo1iK1mEEroL7n2D8pBxOqEdsXgyQAKoGT2miyQckwECQQD5BEnBzs3ddkH7</code>

<code>QjjOnxEpxE3MsLSCJqUWJ6eI</code><code>/ZuKCfxgiAWjHPKny/OA5F/Dr</code><code>+apSJB34BwS6g5l</code>

<code>ClThEIjBAkEA1Oir7tqOA1SkfFfwOyXRK</code><code>/C83XYgjbU2gp594hAPmRbCZu6DYxht</code>

<code>j+UOz0cB9VrLlfHmvzZG1d08AD10+HByHQJAMp5mh9kMC</code><code>/qgCv05Ivc</code><code>+u+jFj9hT</code>

<code>uSk14b0J11UGKxdAkDbWPoQB544T352MwfCdyMeRZmzOCCI</code><code>/7tYczutXgQJADoZd</code>

<code>DGt+mr2QhyccrXxT+9JtoBIqAGDnehvD7MM5vTDvTERjVERbXSC8VOm8OXfbQbyC</code>

<code>CHN0e6yfJkkLDNPnBQJAPP+G+T8PvVZlYOYjptCR+H7ofylVgkGK3eh</code><code>/6pwtyoxR</code>

<code>AJ3mTOQydIpLw3w1cOIDTNZOF8hXxRAJa7imJF74ew==</code>

<code>-----END RSA PRIVATE KEY-----</code>

<code>[root@mylinux home]</code><code># </code>

<code>[root@mylinux home]</code><code># openssl rsa -in rsa.key -pubout ;从私钥中提取公钥</code>

<code>writing RSA key</code>

<code>-----BEGIN PUBLIC KEY-----</code>

<code>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPGeA1ir63tb4C8TkRUvEvoQkP</code>

<code>Mk2NE5389ErMtCB7t4Njif7AVVTWn1zC</code><code>/WWHfwaWfRb4fNdMCyv0aLPRvMCfw8TK</code>

<code>Td6thlD0WJ5nIYAWyOA4XN2AJz1o80</code><code>/iMMkdx1TBju5sjvvOPRYRVeBsta/x/hsD</code>

<code>yo3F+OSHSmgBqDVv3QIDAQAB</code>

<code>-----END PUBLIC KEY-----</code>

三、远程连接SSH服务

1、SSH远程连接原理

    SSH: Secure SHell,建立在应用层和传输层基础上的安全协议。通信及认证过程是加密的。监听tcp的22号端口,是文本协议。其主要工作原理如下图所示:

<a href="http://s5.51cto.com/wyfs02/M02/86/EB/wKioL1fOvo-x_ir4AADvZhxfsYE407.png-wh_500x0-wm_3-wmp_4-s_1605916075.png" target="_blank"></a>

    对于SSH服务协议通常使用的是sshv2版本。sshv2基于双方主机协商选择最安全的MAC实现机制;加密机制及MAC机制是双方协商选定;基于DH实现密钥交换,基于RSA或DSA实现身份认证;客户通过检查服务端的主机密钥来判定是否与其进一步通信。

2、SSH的开源实现工具OpenSSH

    配置文件/etc/ssh/ssh_config

    ssh认证机制:基于口令、基于秘钥。

    ssh  [-p PORT]USERNAME@HOST  (登录远程主机)

        ssh -l USERNAME HOST

        ssh USERNAME@HOST 'COMMAND'  (不登录远程主机,操作远程主机)

    scp: 类cp命令,基于ssh协议跨主机复制

        scp USERNAME@HOST:/path/to/somefile  /path/to/local(远程复制到本地)

        scp /path/to/local  USERNAME@HOST:/path/to/somewhere(复制到远程主机)

        -r: 源文件为目录时使用,以实现递归复制; -p: 保留源文件的复制及修改时间戳,以及权限;

        -q: 静默模式-P PORT:指定服务端端口;

3、基于秘钥的免密通信

<code>[root@mylinux home]</code><code># ssh 192.168.1.108</code>

<code>The authenticity of host </code><code>'192.168.1.108 (192.168.1.108)'</code> <code>can't be established.</code>

<code>RSA key fingerprint is 6b:d7:f0:61:fe:b9:b7:2c:93:f5:5b:be:80:49:77:7d.</code>

<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>

<code>Warning: Permanently added </code><code>'192.168.1.108'</code> <code>(RSA) to the list of known hosts.</code>

<code>[email protected]'s password: </code>

<code>Last login: Tue Sep  6 21:13:57 2016 from 192.168.1.5</code>

<code>[root@lamp01 ~]</code><code># ifconfig </code>

<code>eth0      Link encap:Ethernet  HWaddr 00:0C:29:8B:8C:FE  </code>

<code>          </code><code>inet addr:192.168.1.108  Bcast:192.168.1.255  Mask:255.255.255.0</code>

<code>          </code><code>inet6 addr: fe80::20c:29ff:fe8b:8cfe</code><code>/64</code> <code>Scope:Link</code>

<code>          </code><code>UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1</code>

<code>          </code><code>RX packets:4372 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:2446 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>collisions:0 txqueuelen:1000 </code>

<code>          </code><code>RX bytes:5094407 (4.8 MiB)  TX bytes:166449 (162.5 KiB)</code>

<code>          </code><code>Interrupt:19 Base address:0x2000 </code>

<code>lo        Link encap:Local Loopback  </code>

<code>          </code><code>inet addr:127.0.0.1  Mask:255.0.0.0</code>

<code>          </code><code>inet6 addr: ::1</code><code>/128</code> <code>Scope:Host</code>

<code>          </code><code>UP LOOPBACK RUNNING  MTU:16436  Metric:1</code>

<code>          </code><code>RX packets:38 errors:0 dropped:0 overruns:0 frame:0</code>

<code>          </code><code>TX packets:38 errors:0 dropped:0 overruns:0 carrier:0</code>

<code>          </code><code>collisions:0 txqueuelen:0 </code>

<code>          </code><code>RX bytes:3344 (3.2 KiB)  TX bytes:3344 (3.2 KiB)</code>

    通常我们使用ssh登录远程主机的时候是要密码的,当我们想要免密登录对方的主机时,这时就要用到基于秘钥得认证机制。使用方法也十分简单,只需要两步:

    1、客户端本地生成一对秘钥  

    2、将公钥传输至远程服务器,追加保存到远程主机某用户的家目录   的.ssh/authorized_keys文件或.ssh/authorized_keys2文件中。

    在这里我使用192.168.1.106位客户端。192.168.1.108作为远程服务器。

32

33

34

<code>[root@mylinux home]</code><code># ssh-keygen  -t rsa  ;生成一对秘钥</code>

<code>Generating public</code><code>/private</code> <code>rsa key pair.</code>

<code>Enter </code><code>file</code> <code>in</code> <code>which</code> <code>to save the key (</code><code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>): </code>

<code>Enter passphrase (empty </code><code>for</code> <code>no passphrase): </code>

<code>Enter same passphrase again: </code>

<code>Your identification has been saved </code><code>in</code> <code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.</code>

<code>Your public key has been saved </code><code>in</code> <code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.pub.</code>

<code>The key fingerprint is:</code>

<code>e9:ae:a4:2c:bd:68:64:6a:ae:a4:81:20:39:9f:ac:2f root@mylinux</code>

<code>The key's randomart image is:</code>

<code>+--[ RSA 2048]----+</code>

<code>|                 |</code>

<code>| .       .       |</code>

<code>|=       S        |</code>

<code>|++o.   .         |</code>

<code>|o=+.  . .        |</code>

<code>|E+oo.o .         |</code>

<code>|B=o.+....        |</code>

<code>+-----------------+</code>

<code>[root@mylinux home]</code><code># cd ~/.ssh/</code>

<code>[root@mylinux .</code><code>ssh</code><code>]</code><code># ls</code>

<code>id_rsa  id_rsa.pub  known_hosts</code>

<code>[root@mylinux .</code><code>ssh</code><code>]</code><code># ssh-copy-id -i id_rsa.pub [email protected] ;将公钥传送至远程服务器</code>

<code>Now try logging into the machine, with </code><code>"ssh '[email protected]'"</code><code>, and check </code><code>in</code><code>:</code>

<code>  </code><code>.</code><code>ssh</code><code>/authorized_keys</code>

<code>to </code><code>make</code> <code>sure we haven</code><code>'t added extra keys that you weren'</code><code>t expecting.</code>

<code>[root@mylinux .</code><code>ssh</code><code>]</code><code># ssh [email protected]  ;免密登录成功</code>

<code>Last login: Tue Sep  6 21:18:21 2016 from 192.168.1.106</code>

<code>[root@lamp01 ~]</code><code>#</code>

本文转自 梦想成大牛 51CTO博客,原文链接:http://blog.51cto.com/yinsuifeng/1847001,如需转载请自行联系原作者

继续阅读