SSH远程访问和控制!

远程访问和控制

一.SSH远程管理

1.配置openssh服务端

(1)概述

SSH(Secure Shell)协议

是一种安全通道协议

对通信数据进行了加密处理,用于远程管理

与telnet的区别:

telnet是明文传送;ssh是加密传送,并且支持压缩。

telnet的默认端口号为23;ssh的默认端口号为22.

ssh使用公钥对访问的服务器的用户验证身份,进一步提高的安全性;telnet没有使用公钥

(2)相关配置文件

OpenSSH
服务名称sshd

服务端主程序
/usr/sbin/sshd

服务端配置文件
/etc/ssh/sshd_config

客户端配置文件
/etc/ssh/ssh_config

[root@localhost ~]# rpm -ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
/usr/libexec/openssh/ctr-cavstest
/usr/libexec/openssh/ssh-keysign
/usr/share/doc/openssh-7.4p1
/usr/share/doc/openssh-7.4p1/CREDITS
/usr/share/doc/openssh-7.4p1/ChangeLog
/usr/share/doc/openssh-7.4p1/INSTALL
/usr/share/doc/openssh-7.4p1/OVERVIEW
/usr/share/doc/openssh-7.4p1/PROTOCOL
/usr/share/doc/openssh-7.4p1/PROTOCOL.agent
/usr/share/doc/openssh-7.4p1/PROTOCOL.certkeys
/usr/share/doc/openssh-7.4p1/PROTOCOL.chacha20poly1305
/usr/share/doc/openssh-7.4p1/PROTOCOL.key
/usr/share/doc/openssh-7.4p1/PROTOCOL.krl
/usr/share/doc/openssh-7.4p1/PROTOCOL.mux
/usr/share/doc/openssh-7.4p1/README
/usr/share/doc/openssh-7.4p1/README.dns
/usr/share/doc/openssh-7.4p1/README.platform
/usr/share/doc/openssh-7.4p1/README.privsep
/usr/share/doc/openssh-7.4p1/README.tun
/usr/share/doc/openssh-7.4p1/TODO
/usr/share/licenses/openssh-7.4p1
/usr/share/licenses/openssh-7.4p1/LICENCE
/usr/share/man/man1/ssh-keygen.1.gz
/usr/share/man/man8/ssh-keysign.8.gz


[root@localhost ~]# rpm -qa | grep openssh
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-clients-7.4p1-16.el7.x86_64
[root@localhost ~]# 

服务端

[root@localhost ~]# rpm -ql openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/usr/lib/systemd/system/sshd-keygen.service
/usr/lib/systemd/system/sshd.service
/usr/lib/systemd/system/sshd.socket
/usr/lib/systemd/system/sshd@.service
/usr/lib64/fipscheck/sshd.hmac
/usr/libexec/openssh/sftp-server
/usr/sbin/sshd
/usr/sbin/sshd-keygen
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd

客户端

[root@localhost ~]# rpm -ql openssh-clients 
/etc/ssh/ssh_config
/usr/bin/scp
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
/usr/lib64/fipscheck/ssh.hmac
/usr/libexec/openssh/ssh-pkcs11-helper
/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/slogin.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz

(3)服务监听选项

sshd服务使用的默认端口是tcp的22端口,程序在系统安装时默认安装,默认开机自启。必要时建议修改端口号,并指定监听服务的IP地址,提高安全性隐蔽性。

(4)用户登录控制

sshd服务默认允许root用户登录,通常应禁止root用户或者空密码的用户登录。还可以限制登录验证时间及最大重试次数,超过则自动断开。

也可使用AllowUsers或者DenyUsers配置,允许或者禁止用户登录。

vim /etc/ssh/sshd_config
SSH远程访问和控制!

SSH远程访问和控制!
SSH远程访问和控制!

[root@localhost ~]# cat /var/run/sshd.pid
6850

[root@localhost ~]# ps aux | grep sshd
root       6850  0.0  0.1 112756  3616 ?        Ss   6月01   0:00 /usr/sbin/sshd -D
root      90179  0.0  0.3 160848  5612 ?        Ss   14:17   0:00 sshd: root@pts/2
root      90251  0.0  0.2 151912  5508 pts/1    S+   14:19   0:00 vim /etc/ssh/sshd_config
root      91538  0.0  0.0 112728   984 pts/2    S+   15:56   0:00 grep --color=auto sshd
[root@localhost ~]# 

(5)登录验证方式

① 密码验证

以服务器中本地系统用户的登录名称,密码进行验证。
比较简便,但是不够安全。

②密钥对验证

要求提供相匹配的密钥信息才能通过验证。

远程登录时系统要进行公钥密钥加密解密关联验证,远程管理的安全性G高。

关于公钥和私钥
公钥和私钥是成对生成的,两个密钥互不相同,可以互相加密和解密;
不能根据一个密钥推算出另一个密钥;
公钥对外开放,私钥只有私钥的持有人才知道。

公钥和私钥是配对使用的,公钥对数据加密只能用对应的私钥进行解密;用私钥对数据进行加密,只有对应的公钥才能解密。

说明
当密码验证和密钥对验证都启用时,服务器优先使用密钥对验证。

2.使用SSH客户端程序

(1)程序命令ssh,scp,sftp

① ssh远程登录

[root@client ~]# ssh zhangsan@192.168.206.129
The authenticity of host '192.168.206.129 (192.168.206.129)' can't be established.
ECDSA key fingerprint is SHA256:cqgirGcQK1ern57kcv0dcavJDXc6nZXw08MbCE3IanY.
ECDSA key fingerprint is MD5:77:84:f1:49:e5:fa:9f:c0:f3:81:fb:41:2d:da:c2:52.
Are you sure you want to continue connecting (yes/no)? yes    //第一次登录ssh需要接收服务器发来的RSA密钥
Warning: Permanently added '192.168.206.129' (ECDSA) to the list of known hosts.

zhangsan@192.168.206.129's password:                         //输入密码

[zhangsan@server ~]$ 
[zhangsan@server ~]$ whoami
zhangsan
[zhangsan@server ~]$ ifconfig ens33                          //查看一下IP
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.206.129  netmask 255.255.255.0  broadcast 192.168.206.255
        inet6 fe80::49ad:bf77:4bd5:30bc  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a5:9d:b3  txqueuelen 1000  (Ethernet)
        RX packets 173  bytes 20262 (19.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 142  bytes 17514 (17.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

说明
ssh -p 可以指定端口号
ssh -p 22 root@192.168.206.129

② scp远程复制

非交互式远程安全复制
客户端远程复制文件到服务端
客户端

[root@client ~]# ls
anaconda-ks.cfg       公共  视频  文档  音乐
initial-setup-ks.cfg  模板  图片  下载  桌面

[root@client ~]# scp anaconda-ks.cfg root@192.168.206.129:/opt
root@192.168.206.129's password: 
anaconda-ks.cfg                               100% 1600   447.1KB/s   00:00    

[root@client ~]# 

服务端

[root@server ~]# cd /opt
     
[root@server ~]# ls
anaconda-ks.cfg  rh     

③ sftp安全FTP

交互式安全传输(put上传,get下载)

[root@client ~]# sftp root@192.168.206.129
root@192.168.206.129's password:             //输入密码
Connected to 192.168.206.129.

sftp> ls                                     //查看当前文件
anaconda-ks.cfg           core.17751                initial-setup-ks.cfg      
下载                    公共                    图片                    
文档                    桌面                    模板                    
视频                    音乐                    


sftp> put anaconda-ks.cfg                     //上传
Uploading anaconda-ks.cfg to /root/anaconda-ks.cfg
anaconda-ks.cfg                               100% 1600     1.2MB/s   00:00    


sftp> get initial-setup-ks.cfg                //下载
Fetching /root/initial-setup-ks.cfg to initial-setup-ks.cfg
/root/initial-setup-ks.cfg                    100% 1648   531.2KB/s   00:00    

sftp> quit                                    //退出

[root@client ~]# 

(2)图形工具xshell

远程连接工具xshell
SSH远程访问和控制!
SSH远程访问和控制!
SSH远程访问和控制!
SSH远程访问和控制!

SSH远程访问和控制!

3.构建密钥对验证的SSH体系

(1)概述

SSH协议是采用了基于密钥的安全验证方式用于远程管理的,需要依靠密钥,也就是必须事先建立一 对密钥对,然后把公用密钥(锁头) (Public key)放在需要访问的目标服务器上,另外,还需要把私有密钥(钥匙) (Privatekey)放到SSH的客户端或对应的客户端服务器上。

(2)加密算法

① 对称加密

概念

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用

常用算法

在对称加密算法中常用的算法有: DES、3DES、 TDEA、 Blowfish、 RC2、RC4、 RC5、 IDEA、 SKIPJACK等。

特点

加密方和解密方使用同一个密钥;
加密解密的速度比较快,适合数据比较长时的使用;
密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;

优缺点

对称加密算法的优点是算法简单,速度快;
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露, 那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一 秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

② 非对称加密

概念

发生方和接收方在本地都会产生一对私钥和公钥;非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥) 和私有密钥(privatekey:简称私钥) 。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

常用算法

RSA (RSA algorithm) :目前使用最广泛的算法
DSA (Digital Signature Algorithm) :数字签名算法,和RSA不同的是DSA仅能用于数字签名, 不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快
ECC (lliptic curve cryptography, 椭圆曲线加密算法)
ECDSA: Eliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC和DSA的结合,相比于RSA算法,ECC可以使用更小的秘钥,更高的效率,提供更高的安全保障

原理

首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下寻找事先放上去的对应用户的公用密钥,然后把它和连接的SSH客户端发送过来的公用密钥进行比较。如果两个密钥一致, SSH服务器就用公钥加密"质询" (challenge)并把它发送给SSH客户端。

特点

私钥不能在网络中传输,私钥可以解密公钥
公钥可以在网路中传输,公钥不能解密私钥

(3)客户端和服务端连接过程

用工具制作公钥和私钥
client产生公钥和私钥
server产生公钥和私钥

第一次建立连接时,客户端把公钥发送给server,server保存客户端的公钥
当真正需要建立连接时,客户端带着公钥一并发起建立连接的请求
若客户端的公钥与server接收的客户端的公钥一致
这时server会拿客户端的公钥加密一串随机的数据发货给客户端,客户端拿自己的私钥解密这串数据,发送回给服务端
server收到客户端解密国购的数据,发现就是服务端加密的数据,这时就认为此客户端是受信任,允许建立连接
若客户端的公钥与server接收的客户端的公钥不一致
server会要求客户端再次发生公钥给其,再验证一次,验证成功之后就是客户端的公钥与server接收的客户端的公钥一致

(4)生成密钥

生成密钥使用命令ssh-keygen,默认是RSA加密算法,ssh-keygen -t 可以指定加密算法

客户端

[root@client ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):    //默认存放私钥的路径
Enter passphrase (empty for no passphrase):            //私钥的口令 空或者输入口令
Enter same passphrase again:                           //再次确认口令
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:BRVukNFVnGtYk+49CEartCMr/wdOHcvgSDX4JXXsQsQ root@client
The key's randomart image is:
+---[RSA 2048]----+
|        ==*=o+.o |
|       ..B.E..*  |
|        o X o+ o |
|       . * *..+  |
|      . S B =o.. |
|       o B + ....|
|        = o     .|
|     . . . .     |
|      o....      |
+----[SHA256]-----+

[root@client ~]# ls -a
.                .bash_profile  .dbus                 .pki          公共  下载
..               .bashrc        .esd_auth             .ssh          模板  音乐
anaconda-ks.cfg  .cache         .ICEauthority         .tcshrc       视频  桌面
.bash_history    .config        initial-setup-ks.cfg  .viminfo      图片
.bash_logout     .cshrc         .local                .xauthWhtCqH  文档

[root@client ~]# cd .ssh
                            
[root@client .ssh]# ls
id_rsa  id_rsa.pub  known_hosts                   //存放私钥和公钥
      
[root@client .ssh]# cat id_rsa                    //查看私钥
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAn6h6xBhDfCU5FFZmVxyKEY6li6ZBL3vwnkdTPBChW1AC/aK3
rwMBJhNHe0k4QjGU8BKWE4y3oG2vem0YLHg4XDcsqX1GWxiG5L4Fa0fHXoaYZuwb
qY9iy9jkz7EiS9ztjWLW91rAORgbNbsUO7BOt2kRSyVUt1jXxz3B1sQ3wjx4y0T/
2E7LuYU4gL3ypIdnZdfB/p2XTwKhX5hwAYJqQGoAHqzY5NW73FX7mISHHKmWQEyA
l7NkB4hlZV4Hdo2Uvd6pJmtdkhksPwK1CWe7L3ANsPr/V/r/09nTIBcs8nly0dkP
sQyefr4jEJrre3/qkdqN1brCRZpF1AU/yFaMjQIDAQABAoIBAAMsn1w8u0LBnrPn
z9sVhy04L9Rp9svR5APRmTcNgZfGLHkMfihtn9047uflmce/Ip3vUKqM1q3K4H1H
o/5mWYCD3FB2XCq9fxkXKhZq8+zOMkOBmD8zyZwR8OKsO+lUOCjieTGrzTyVXR0h
XhKdu8LrxNtAn8GRc6DTeoIhnpYvA5GIaBTQSS4lt1r8rS654pqpDQCFZ/xP8CP5
19Ef8KXKAOyIk0EXlS/yrOVpjzeEvyZB/nEkMxFXYcvVj3tbyO3MSBoFlXYafjg3
IbfGLlu3zhcYxK7O0dCb9QlaRxJGQhSE0RBmYv1Knz0Orhb30w2Qs12B1LCYf1Pl
EOZJbAUCgYEAzV9cjluOlMfqhUebSA/CRwoDqKr6o3+eJKC2srI4ElZmJUPZ4aJj
ZC3vjDioY60mb97yMqmWXIS6KyaLMlJI5hnulhcQMwF82X4PKamH2gZ80FI02cNo
E1QpLhDu2aYCSKaWaUBXAgdDoW4ax5AvQUpOCGupXM+ovDc3+UkzGB8CgYEAxwQt
SJQPAAsqasi/nL/ImRST62/ZFBYi+VMF7jysbS+iRA6YEQ/8Z+JLjKGWdut96RSz
j4ZAWlCeEL9w7bdfJi0IQovIgUT6kLLu15+M8XydOUN+FfIw9aYL4FUJ/FnCvGLh
rRPjHZxLci05YeBUY9lguNk7NKcGLpHrLd5c9dMCgYAK7vW9enBXyWDZ4ZsJthUQ
tR7GvvuC8stXhdrUHprPlxvvBfK2iW+jKLLlEysby18Ne6AHRHIF0OccXvvwHONW
pLDH+shY/s5HwedKv4TE/a1tZcL8iOOki8l5c1tT6PucJIpDZjJ7oClgkb0JPMrX
Pf5zgk/M6h1Aj+wB8Hyw3wKBgQCZyBd5urawkPAw3Xh6lhNafnUieyXhiI1z3Px7
L7UJFcKsFh7ZKGIgn9NDEuWidKuxfIaXg+ScJSlOxa9scMJ8TFXSnhLMGNIJF8rJ
IQeW3nTa99Uo/iFo3+rTaMKzlWSNj1bVF8Xqbog57MonYGG1WhaMH4fJUrrLJ4Pz
yJxKcwKBgQCVDyI8cuZMyDR+Fo/DG2EDlta3wrCxOVXfaDdvFhQ9DITr1TDQndep
/7k5bBNsKsgWh4L6YuXKbgoorYr/LTA6afzvR6jY85Ebc02XewYuoHX3YirZEpxM
WK+fDCHjP8O/JGfbkpj4DlHWpG1ZrCKMeWZeEV5OZBMlljFV49g59w==
-----END RSA PRIVATE KEY-----
[root@client .ssh]# 
[root@client .ssh]# 

[root@client .ssh]# ssh-copy-id root@192.168.206.129                 //推送公钥
/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@192.168.206.129's password: 

Number of key(s) added: 1

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

[root@client .ssh]# 


[root@client ~]# ssh root@192.168.206.129      //推送过公钥后远程登录实现免交互直接登录
Last login: Wed Jun  2 23:31:38 2021       //私钥口令不是空的情况下第一次远程连接时要输入私钥口令
[root@server ~]# 

服务端
查看公钥
SSH远程访问和控制!

二.TCP Wrappers访问控制

1.概述

相当于一堵墙,位于防火墙之上;比如有一条数据,先经过防火墙Firewall验证,若防火墙没有拦截成功,就到TCP Wrappers模块认证,若此模块内有对应数据的黑名单,这道墙就阻拦数据;TCP Wrappers是否存在需要具体要看服务是否支持TCP Wrappers模块

2.保护机制实现方式

通过tcpd程序对其他服务程序进行包装

通过lld查看是否有libwrap.so.数据库

[root@client ~]# which ssh
/usr/bin/ssh
[root@client ~]# which sshd
/usr/sbin/sshd
[root@client ~]# ldd /usr/sbin/sshd |grep libwrap
	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fcfc74ce000)
[root@client ~]# 

3.访问策略控制的配置文件

/etc/hosts.allow
/etc/hosts.deny

4.策略应用

(1)设置访问控制策略

策略格式
服务程序列表(进程名/服务名):客户端地址列表

服务程序列表
多个服务以逗号分隔,ALL表示所有服务

客户端地址列表
多个地址以逗号分隔,ALL表示所有地址
允许使用通配符?和*
网段地址,如192.168.4.或者192.168.4.0/255.255.255.0
区域地址,如.benet.com

(2)策略的应用顺序

1.检查hosts.allow,找到匹配则允许访问
2.再检查hosts.deny,找到则拒绝访问
3.若两个文件中均无匹配策略,则默认允许访问

(3)应用

编辑黑名单

vim /etc/hosts.deny
SSH远程访问和控制!
SSH远程访问和控制!
SSH远程访问和控制!
说明
若白名单指定具体ip地址,黑名单指定的是一样的网段,结果仍是以白名单优先,仅允许ip地址ssh连接
若两个文件内均无匹配策略,则默认允许访问

上一篇:linux openssh


下一篇:linux – 如何跟踪ssh连接时间,断开连接时间和空闲时间?