一、SSH远程管理基本简介
SSH协议:
SSH协议是一种安全通道协议,主要是用来实现字符界面的远程登录、远程复制等功能
相比于Telnet、RSH、RCP等安全性更高
默认端口: TCP 22
OpenSSH服务端:
OpenSSH是由openssh和openssh-server等软件包提供的
Linux系统默认已经将sshd添加为标准的系统服务
服务名称: sshd
服务端主程序: /usr/sbin/sshd
服务端配置文件: /etc/ssh/sshd_config
二、OpenSSH服务端相关配置
因为主配置文件里大多都是以 # 开头的注释行,所以一般可以直接在主配置文件末尾添加选项,当然添加之前还是要确认所加的选项有没有
******相关服务监听选项 [root@ssh1 ~]# vim /etc/ssh/sshd_config 。。。。。。 Port 22 (监听端口,默认22) ListenAddress 监听地址 Protocol ssh协议版本 USEDNS no (禁用DNS反向解析) ******相关的用户登录控制选项 [root@ssh1 ~]# vim /etc/ssh/sshd_config 。。。。。。 LoginGraceTime 2m (登录验证时间: 默认2 分钟) PermitRootLogin yes (默认是“yes”,表示允许root 用户登录) PermitEmptyPasswords no (默认禁止空密码账户登录) MaxAuthTries 6 (最大的重试次数) DenyUsers 用户 (拒绝这个用户在任何机器上使用ssh 远程登录;如果拒绝多个用户中间用空格隔开) DenyUsers 用户@IP地址 (拒绝这个用户在对应的IP地址的机器上进行远程ssh 登录) AllowUsers 用户名 (仅允许某个用户通过ssh 远程登录) AllowUsers 用户名@IP地址 (仅允许某个用户通过对应地址的主机进行SSH远程登录) (注意: DenyUsers 选项和AllowUsers 选项不要同时使用)
三、SSH客户端程序的登录以及使用
在Linux主机上登录Linux服务器的方法(格式):
[root@ssh1 ~]#ssh 用户名@登录Linux服务器的地址 -p 端口号
-登录验证方式
登录验证的方式有两种:
(1)密码验证: 服务器对本地系统用户进行用户名和密码验证 容易受到暴力破解
(2)密钥对验证: 在客户端上创建密钥文件 (公钥和私钥) ,公钥上传到服务器指定位置,私钥自己保留,远程登录时进行加密、解密关联认证,增强远程管理安全性
注意:当两种验证方式都启用时,服务器优先使用密钥对验证,对于安全性较高的服务器,建议关闭密码验证
(公钥和私钥可以相互解密,但是不能相互推算,只有私钥能解密公钥,公钥也同样只有私钥可以解密)
******主配置文件的配置选项 [root@ssh1 ~]# vim /etc/ssh/sshd_config 。。。。。。 PasswordAuthentication yes (密码验证方式开启) PubkeyAuthentication yes (密钥对验证开启) AuthorizedKeysFile .ssh/authorized_keys (指定公钥库位置)
-SSH客户端程序的使用
OpenSSH客户端: 由openssh-clients软件包提供 (linux系统默认已经安装)
,包括ssh远程登录命令,以及scp远程复制和sftp文件传输命令
(1)ssh远程登录:
- 通过第三方工具使用ssh进行远程登录
(如Xshell、CRT、Putty等图形化工具)
- 命令登录:
[root@ssh1 ~]# ssh 用户名@主机地址 -p 端口号
(端口号默认就是22,所以可以不用跟-p选项,除非修改了ssh的端口号,就需要指定ssh端口号)
(2)scp远程复制
语法结构:
[root@ssh1 ~]# scp root@对方的地址:对方文件位置 本地位置 (回车后,按照提示输入对方root账户的密码)
示例: ******将192.168.100.7主机的root目录下的AAA.txt文件复制到本机的root目录下,使用root账户登录 [root@ssh2 ~]# scp root@192.168.100.7:/root/AAA.txt /root/ The authenticity of host '192.168.100.7 (192.168.100.7)' can't be established. ECDSA key fingerprint is SHA256:weaks0wagWSeyPZfM99IlV/pbISthvV5FMnczNdtcj4. ECDSA key fingerprint is MD5:af:d9:66:c2:45:b3:c6:8e:0b:53:07:99:d7:8f:a0:06. Are you sure you want to continue connecting (yes/no)? yes (会询问是否进行连接,输入yes即可) Warning: Permanently added '192.168.100.7' (ECDSA) to the list of known hosts. root@192.168.100.7's password: (输入root账户的密码) AAA.txt 100% 0 0.0KB/s 00:00 (显示传输完毕) [root@ssh2 ~]# ls (查看/root下发现多了一个AAA.txt) AAA.txt anaconda-ks.cfg ******将本地root目录下的bbb目录复制到192.168.100.8主机下的root目录里 [root@ssh1 ~]# scp -r /root/bbb root@192.168.100.8:/root/ (复制目录需要加-r选项) The authenticity of host '192.168.100.8 (192.168.100.8)' can't be established. ECDSA key fingerprint is SHA256:k2YVo9hnbXnXqpinsSIIKc+xwNr0DYFgwd5J6thuuaU. ECDSA key fingerprint is MD5:6a:9d:38:87:6f:67:63:b2:87:30:a0:4e:9e:1b:8f:a2. Are you sure you want to continue connecting (yes/no)? yes (输入yes) Warning: Permanently added '192.168.100.8' (ECDSA) to the list of known hosts. root@192.168.100.8's password: (输入密码) 传输完毕后切换到192.168.100.8主机,发现root目录下多了一个bbb目录 [root@ssh2 ~]# ls AAA.txt anaconda-ks.cfg bbb
(3)sftp文件传输 (安全的ftp)
语法结构:
登录 [root@ssh2 ~]# sftp 用户名@对方地址 (按回车输入密码) 下载 sftp>get 文件名 上传 sftp>put 文件名 退出登录 sftp>bye 或 exit
示例: ******登录主机192.168.100.8 [root@ssh1 ~]# sftp root@192.168.100.8 root@192.168.100.8's password: (输入密码) Connected to 192.168.100.8. sftp> get aaa.txt (下载aaa.txt文件) Fetching /root/aaa.txt to aaa.txt sftp> put bbb.txt (上传bbb.txt文件) Uploading bbb.txt to /root/bbb.txt bbb.txt 100% 0 0.0KB/s 00:00 sftp> bye (退出登录) [root@ssh1 ~]# ls (查看root目录下,发现多了aaa.txt文件) aaa.txt anaconda-ks.cfg bbb.txt
四、构建密钥对验证的SSH体系
Linux主机 | ip地址 |
ssh1 | 192.168.100.7 |
ssh2 | 192.168.100.8 |
要求: ssh2主机中的boss账户可以通过密钥对验证体系登录ssh1主机
步骤:
******在ssh2主机上创建boss账户,并且创建密钥对 [root@ssh2 ~]# useradd boss [root@ssh2 ~]# passwd boss 更改用户 boss 的密码 。 新的 密码: 无效的密码: 密码未通过字典检查 - 过于简单化/系统化 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 ******切换成boss账户登录,并且使用ecdsa的加密方式创建密钥对文件 [root@ssh2 ~]# su - boss [boss@ssh2 ~]$ ssh-keygen -t ecdsa (连续按三次回车即可) Generating public/private ecdsa key pair. Enter file in which to save the key (/home/boss/.ssh/id_ecdsa): (私钥公钥存放位置) Created directory '/home/boss/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/boss/.ssh/id_ecdsa. Your public key has been saved in /home/boss/.ssh/id_ecdsa.pub. The key fingerprint is: SHA256:DngxV6VMBECrjdfAeFpPZx6vJjfMEINGeCdaquWh7yI boss@ssh2 The key's randomart image is: +---[ECDSA 256]---+ | o+..o+.. | | .++o.+ . | | .=@o= * | | =X O * o | | ==.= S . . | | o .o o + . | | . o B | |E . . + . | | . o. | +----[SHA256]-----+ 密钥对文件的默认位置:/home/boss/.ssh/ id_ecdsa(私钥文件)id_ecfsa.pub(公钥文件) [boss@ssh2 ~]$ ll /home/boss/.ssh 总用量 8 -rw------- 1 boss boss 227 12月 16 18:53 id_ecdsa -rw-r--r-- 1 boss boss 171 12月 16 18:53 id_ecdsa.pub ******把公钥文件上传给ssh1主机的tmp目录下 [boss@ssh2 ~]$ scp /home/boss/.ssh/id_ecdsa.pub root@192.168.100.7:/tmp The authenticity of host '192.168.100.7 (192.168.100.7)' can't be established. ECDSA key fingerprint is SHA256:weaks0wagWSeyPZfM99IlV/pbISthvV5FMnczNdtcj4. ECDSA key fingerprint is MD5:af:d9:66:c2:45:b3:c6:8e:0b:53:07:99:d7:8f:a0:06. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.100.7' (ECDSA) to the list of known hosts. root@192.168.100.7's password: id_ecdsa.pub 100% 171 193.1KB/s 00:00 (传输完成) ******切换到ssh1主机上,创建boss用户,并且在boss的家目录中创建公钥数据库的存放目录.ssh [root@ssh1 ~]# useradd boss [root@ssh1 ~]# mkdir -p /home/boss/.ssh ******把ssh2发送过来的公钥文件的内容追加到刚刚创建的公钥数据库中并且指定文件名为authorized_keys [root@ssh1 ~]# cat /tmp/id_ecdsa.pub >> /home/boss/.ssh/authorized_keys ******在ssh2主机上使用密钥对验证登录ssh1的boos用户 [boss@ssh2 ~]$ ssh boss@192.168.100.7 Last login: Wed Dec 16 19:07:24 2020 from 192.168.100.8 [boss@ssh1 ~]$ 不用输入密码,直接就可以使用boss用户登录到ssh1主机
五、TCP Wrappers访问控制
定义: 一种防护机制,作为应用服务与网络之间的一道特殊防线,提供额外的安全保障(类似于ACL)
工作原理: 将TCP服务程序 包裹 起来,监听TCP服务程序端口,增加一个安全检测过程,外来的链接请求必须通过这层安全检测,获得许可后,才可以真正的访问服务程序
CentOS7.3上默认的软件包: tcp_wrappers-7.6-77.el7.x86_64
提供: 执行程序tcpd 和共享链接库文件libwrap.so.*
保护机制的两种实现方式:
(1)直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd
(2)其他的服务程序调用libwrap.so.*链接库,不需要运行tcpd (应用更广泛,更有效率)
查看程序的共享库:
[root@ssh1 ~]# ldd /usr/sbin/sshd | grep "libwrap" libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f90ca8a6000)
TCP Wrappers对应的两个策略文件:
(1)/etc/hosts.allow: 用来设置允许策略
(2)/etc/hosts.deny: 用来设置拒绝策略
策略的配置格式: 服务程序列表:客户端地址列表
(1)服务程序列表
ALL: 表示所有服务
单个服务: 直接写服务名
例:httpd、ftpd等
多个服务程序: 服务名中间以 , 隔开
例:httpd,sshd
(2)客户端地址列表
ALL: 任何客户端
LOCAL: 本机地址
单个IP: 直接写一个IP
例:192.168.100.1
网段地址:
例: 192.168.100.0/255.255.255.0 (表示192.168.100.0 这个网段)
以"."开始的域名: 所有的以同一个域名后缀结尾的主机
例:.baidu.com (也就是说前面不管是www还是mail只要是后缀是.baidu.com的都符合这个域名地址)
以"." 结束的网络地址: 表示一个网段
例:192.168.10. (表示192.168.10.0网段)
访问控制的基本原则:
(1)先检查/etc/hosts.allow 文件,找到相匹配的策略,就允许访问
(2)然后继续检查/etc/hosts.deny ,如果找到相匹配的策略,则拒绝
(3)如果检查两个文件都没有匹配的策略,则允许访问