05.12 架构之ssh-key章节

第一章 ssh简介

1. ssh含义
SSH服务端是一个守护进程(daemon),它在后台运行并相应来自客户端的连接请求。SSH服务端的进程名为sshd,负责实时监听远程SSH客户端的连接请求,并进行处理,一般包括公共密钥认证、密钥交换、对称密码加密和非安全连接等。这个SSH服务就是我们前面基础系统优化中保留开机自启动的服务之一。

SSH客户端包含ssh以及像scp(远程拷贝)、slogin(远程登录)、sftp(安全FTP文件传输)等应用程序。

ssh工作机制大致是本地的ssh客户端先发送一个连接请求到远程的ssh服务端,服务端检查连接的客户端发送的数据包和IP地址,如果确认合法,就会发送密钥给SSH的客户端,此时,客户端本地再将密钥发回给服务端,自此连接建立。SSH 1.x和SSH 2.前者为密码后者是密钥


2. 基于口令的安全验证
基与口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接账号和口令(当然也要知道对应服务器的IP及开放的SSH端口,默认为22),就可以通过ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。

[root@nfs01 ~]# ssh -p22 root@10.0.0.41
root@10.0.0.41's password: 
Last login: Fri May 12 11:50:03 2017 from 10.0.0.253
[root@backup ~]# exit
logout
Connection to 10.0.0.41 closed.
[root@nfs01 ~]#

3. 基于密钥(钥匙锁头)的安全验证
基于密钥的安全验证方式是指,需要依靠密钥,也就是必须事先建立一堆密钥对,然后把公用密钥(锁头)放在需要访问的目标服务器,另外,还需要把私有密钥(钥匙)(Private key)放到SSH的客户端或对应的客户端服务器上。
SSH客户端收到质询之后就可以用自己的私钥解密,再把它发送给SSH服务器,使用这种方式,需要知道联机用户的密钥文件。与第一种基于口令验证的方式相比,第二种方式不需要在网络上传送口令密码,所以安全性更高了,这时我们也要注意保护我们的密钥文件,特别是私钥文件,一旦被黑客获取,危险就很大了。

4. SSH配置文件信息
修改SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config实现的。
一般来说SSH服务使用默认的配置已经能够很好的工作了,如果对安全要求不高,仅仅提供SSH服务的情况,可以不需要修改任何配置。

命令参数参数说明
Port指定sshd进程监听的端口号,默认为22。可以使用多条指令监听多个端口,默认将在本机的所有网络接口上监听,但是可以通过ListenAddress指定只在某个特定的接口上进行监听。
PermitEmptyPasswords是否允许密码为空的用户远程登录。默认为“no”
PermitRootLogin是否允许root登录。可用值如下:yes表示允许,NO表示为禁止。Without-password表示禁止使用密码认证登录。Forced-commands-only表示只有在指定了command选项的情况下才允许使用公钥认证登录,同时其它认证方法全部被禁止。这个值常用于做远程备份之类的事情。1.多开一个窗口。2.临时多部署一条连接方式。3给普通用户sudo权限。
UseDNS指定sshd是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真是对应。默认值为yes
ListenAddress指定监听并提供服务相应的网卡地址信息。

5. 钥匙和锁头的使用过程
连接服务的ssh客户端,创建出密钥和锁头
连接服务的ssh客户端,将锁头发送给ssh服务端
连接服务的ssh客户端,发出连接请求
ssh服务端收到连接请求后,会发出质询信息,你想链接我,你能打开我的锁头吗
ssh客户端利用钥匙解密了质询,至此钥匙和锁头就匹配了,将匹配后的结果告知服务器端
ssh服务端认可匹配结果,连接请求建立


第二章 查看端口命令总结

1. ss

[root@nfs01 ~]# ss -lntup |egrep 22
udp    UNCONN     0      0                      *:57343                 *:*      users:(("rpc.statd",1223,7))
udp    UNCONN     0      0              127.0.0.1:975                   *:*      users:(("rpc.statd",1223,4))
udp    UNCONN     0      0                     :::40163                :::*      users:(("rpc.statd",1223,9))
tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",1349,4))
tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",1349,3))
tcp    LISTEN     0      128                    *:15735                 *:*      users:(("rpc.statd",1223,8))
tcp    LISTEN     0      128                   :::28156                :::*      users:(("rpc.statd",1223,10))

2. netstat

[root@nfs01 ~]# netstat -lntup |egrep 22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1349/sshd           
tcp        0      0 0.0.0.0:15735               0.0.0.0:*                   LISTEN      1223/rpc.statd      
tcp        0      0 :::22                       :::*                        LISTEN      1349/sshd           
tcp        0      0 :::28156                    :::*                        LISTEN      1223/rpc.statd      
udp        0      0 0.0.0.0:57343               0.0.0.0:*                               1223/rpc.statd      
udp        0      0 127.0.0.1:975               0.0.0.0:*                               1223/rpc.statd     

3. lsof

[root@nfs01 ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1349 root    3u  IPv4  11110      0t0  TCP *:ssh (LISTEN)
sshd    1349 root    4u  IPv6  11112      0t0  TCP *:ssh (LISTEN)
sshd    2617 root    3r  IPv4  19684      0t0  TCP 10.0.0.31:ssh->10.0.0.253:54109 (ESTABLISHED)

4. namp

[root@nfs01 ~]# nmap -p 22 10.0.0.41

Starting Nmap 5.51 ( http://nmap.org ) at 2017-05-12 15:07 CST
Nmap scan report for 10.0.0.41
Host is up (0.00028s latency).
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 00:0C:29:A0:B1:48 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

5. telnet

telnet 10.0.0.41 22

第三章 scp用法

本地nfs客户端推送到rsync服务端

[root@backup ~]# scp /etc/hosts root@172.16.1.31:/data/
root@172.16.1.31's password: 
hosts                                                                   100%  321     0.3KB/s   00:00

[root@nfs01 data]# ll
total 4
-rw-r--r-- 1 root root 321 May 12 16:01 hosts

本地nfs客户端从rsync服务端拉

[root@backup ~]# scp root@172.16.1.31:/etc/hosts   /tmp/
root@172.16.1.31's password: 
hosts                                                                   100%  320     0.3KB/s   00:00   

第四章 SSH入侵案例说明

  1. 如何防止SSH登录入侵小结:
  2. 用密钥登录,不用密码登录。
  3. 牤牛阵法:解决SSH安全问题
  4. 防火墙封闭,SSH,,指定源IP限制(局域网、信任公网)
  5. 开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)
  6. 尽量不给服务器外网IP
  7. 最小化(软件安装-授权)
  8. 给系统的重要文件或命令做一个指纹 md5sum /etc/hosts >/tmp/hosts_finger.txt grep XXX
    /tmp/hosts_finger.txt
  9. 给他上锁chattr +i +a

第五章 ssh+key共享密钥部署流程说明

1. 生成钥匙 锁头 (密钥对)

[root@m01 ~]# ssh-keygen -t dsa 
   Generating public/private dsa key pair.                     #生成一对dsa类型的秘钥对(公钥和私钥)
   Enter file in which to save the key (/root/.ssh/id_dsa):    #想要把你的密钥对放在哪里 默认即可
   Enter passphrase (empty for no passphrase):                 #给你的钥匙锁头 加上个密码把。 回车
   Enter same passphrase again:                                #确认   
   Your identification has been saved in /root/.ssh/id_dsa.    #私钥放置的位置(钥匙)
   Your public key has been saved in /root/.ssh/id_dsa.pub.    #公钥放置的位置(锁头)
   The key fingerprint is:
   e8:26:51:ba:ed:f0:00:37:a7:3a:ab:ab:34:83:0a:9e root@m01
   The key's randomart image is:
   +--[ DSA 1024]----+
   |                  |
   |                  |
   |      .           |
   |     o .          |
   |  . = o S         |
   |.  o O            |
   |o+  * +           |
   |= =. B            |
   |*Eoo  o           |
   +-----------------+

[root@m01 ~]# ll ~/.ssh -d
drwx------ 2 root root 4096 2017-04-18 09:42 /root/.ssh
[root@m01 ~]# ls -l /root/.ssh/
total 12
-rw------- 1 root root  668 Jan  5 16:37 id_dsa                     ###私钥 钥匙 
-rw-r--r-- 1 root root  598 Jan  5 16:37 id_dsa.pub                 ####公钥 锁头
-rw-r--r-- 1 root root 1576 Jan  5 14:58 known_hosts

第六章 公钥(锁头)如何传远端端服务端

1. 查看sshd端口

[root@m01 ~]# netstat -lntup |egrep sshd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1192/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1192/sshd  

2. 指定公钥文件发送至服务端IP

[root@ansible01-61 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.111
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.1.111's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '172.16.1.111'"
and check to make sure that only the key(s) you wanted were added.

3. ssh-copy-id是个脚本文件

[root@m01 ~]# file `which ssh-copy-id`
/usr/bin/ssh-copy-id: POSIX shell script text executable

4. 删除远端服务器的公钥文件

[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub "-p52113 root@172.16.1.41"
说明:根据命令脚本,修改$1传参信息,从而实现根据ssh不同端口传送公钥文件 

============================================
#!/bin/bash
until [ $# -eq 0 ]
do
    echo $*
    shift
done
============================================

5. ssh-copy-id执行过程

ssh $1 "exec sh -c 'umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon ~/.ssh ~/.ssh/authorized_keys >/dev/null 2>&1 || true)'"

①. 临时设置了一下umask 077 
②. 看目标服务器是否存在 ~/.ssh 目录
③. 如果目录不存在,则创建 mkdir ~/.ssh 
④. 把id_dsa.pub内容 放到了 ~/.ssh/authorized_keys   
authorized_keys文件内容实质上等于id_dsa.pub公钥文件内容

6. ssh服务如何识别公钥文件

[root@m01 ~]# vim /etc/ssh/sshd_config            
49 #AuthorizedKeysFile     .ssh/authorized_keys
说明:利用ssh服务配置文件,识别公钥文件信息   

7. 操作后检查直接输入命令

[root@m01 ~]# ssh root@172.16.1.31 hostname
nfs01

8. ssh服务分发公钥实质执行过程

  1. 管理服务器创建私钥和公钥(密钥对)
  2. 将公钥文件远程传送复制到被管理服务器相应用户~/.ssh下,并修改.ssh目录权限为700
  3. 修改公钥文件文件名称为authorized_keys,授权权限为600
  4. 利用ssh服务配置文件的配置参数,进行识别公钥文件authorized_keys
  5. 进而实现基于密钥远程登录服务器(免密码登录/非交互方式登录)

第七章 ssh+key公钥批量分发

1. 生成密钥阻碍因素处理办法(非交互)

[root@m01 script]# ssh-keygen -t dsa -f ~/.ssh/id_dsa  -P '' -q
ssh-dss AAAAB3NzaC1kc3MAAACBAI6xLEXhSXfNcpmh/64vmOhgZjU4y/KvYRvUkBptp7dDYhHeVLRh3fCMmuPy4PCyMg3eWbinWV2Wv9az83g/bG7sNhmwIWCeey/9UD7Iiyzv4azOHR65gbKoPfOGEOjZ1XvV3dJS9wjgyK59xuhOyYEP+dI86J8l8H7uJ131XH7NAAAAFQCjiQqnJZV44vroP+sP23MPYMOMGQAAAIALpuvd8WWO2dgrgFCOE9SDeZtlTDyeXLoqj/A+04SYFk3u6lh6R4iOVE6arWB9w81aPPh1X0mXXgKJT4j5o7iET/NS7jW43JGnyqsM8DFadQ1atNqzUHRezCfw96v7d8hWFuGEFnyckY3zJyeD/Ri9RDpCMxa/ZDsVZWU3U/Ld6gAAAIBgRsOUF4TNbK6AG6phjoLPIkLvpvOunZveB4e+Ul0ikJDIJror1NJM8epWzEuBUZQd4T+mrfW8q5UYNDAlwxsI4F9t1Cdc4EH5ce3/s+lFnIAdiR8thfn0IFMrFFb/iN8fcIaazcE8MNKyJLJyzPv0F19Kxco7lYv/0Wnq8YkwUQ==

2. ssh连接密码信息阻碍问题解决方式

#!/bin/bash
for ip in 7 31 41
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值