在实际生产环境中,不可能一直在服务器本地对服务器进行相应的管理,大多数企业服务器都是经过远程登陆的方式进行管理的。当须要从一个工做站管理数以百计的服务器主机时,远程维护的方式将更占优点。算法
SSH是一种安全通道协议,主要用来实现字符界面的远程登陆、远程复制等功能。SSH协议对通讯双方的数据传输进行加密处理,其中包括用户登陆时输入的用户口令。比以往的Telnet(远程登陆)、RSH(远程执行命令)等传统的方式相比,SSH协议提供了更好的安全性。shell
OpenSSH是实现SSH协议的开源软件项目。在CentOS 7.3系统中。OpenSSH服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。数据库
sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提升在网络中的隐蔽性。除此以外,SSH协议的版本选用v2比v1的安全性要更好,禁用DNS反向解析能够提升服务器的响应速度。vim
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服务的主配置文件 ………… //省略部份内容 Port 22 //监听端口为22 ListenAddress 0.0.0.0 //监听地址为0.0.0.0,表示所有监听 Protocol 2 //使用SSH v2的版本 UseDNS no //禁用DNS反向解析,提升响应速度 ………… //省略部份内容 [root@localhost ~]# systemctl restart sshd //从新启动sshd服务
sshd服务默认容许root用户登陆,但在网络中是很大的安全隐患,广泛的作法是普通用户,而后切换到root用户。安全
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服务的主配置文件 ………… //省略部份内容 LoginGraceTime 2m //登陆验证时间为2分钟 PermitRootLogin no //禁止root用户登陆 MaxAuthTries 6 //最大重试次数为6次 PermitEmptyPasswords no //禁止空密码登陆 ………… //省略部份内容 [root@localhost ~]# systemctl restart sshd //从新启动sshd服务
当但愿只容许或禁止某个用户登陆时,可使用AllowUsers或DenyUsers配置,二者用法相似(可是注意不要同时使用)。例如容许xiaoli和xiaozhang用户登陆,且其中xiaozhang用户仅能从IP地址为192.168.1.2的地址远程登陆。服务器
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服务的主配置文件 ………… //省略部份内容 AllowUsers xiaoli xiaozhang@192.168.1.2 //多个用户之间用空格进行分隔 [root@localhost ~]# systemctl restart sshd //从新启动sshd服务
sshd服务支持两种验证方式: 1.密码验证:对服务器中的本地系统用户的登陆名称、密码进行验证。这种方式使用最为简便,可是系统用户密码存在可能遭遇密码穷举; 2.密钥对验证:要求提供相匹配的密钥信息才能经过验证。一般先在客户端中建立一对密钥,而后将公钥文件存放到服务器指定位置。远程登陆时,系统将使用公钥、私钥进行加密/解密验证,这种方式不易被假冒,且能够免交互登陆,在Shell中被普遍应用。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证!没有特殊要求,建议两种方式都启用!网络
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服务的主配置文件 ………… //省略部份内容 PasswordAuthentication yes //启用密码验证 PubkeyAuthentication yes //启用密钥对验证 AuthorizedKeysFile .ssh/authorized_keys //指定公钥库文件 ………… //省略部份内容 [root@localhost ~]# systemctl restart sshd //从新启动sshd服务
在CentOS 7.3系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登陆命令,以及scp、sftp远程复制和文件传输命令等。app
经过ssh命令能够远程登陆sshd服务,为用户提供一个安全的Shell环境,以便对服务器进行管理和维护!dom
[root@kehuduan ~]# ssh xiaozhang@192.168.1.1
若是sshd服务器使用非默认的端口号(好比2222)则须要使用“-p”选项指定端口号。ssh
[root@kehuduan ~]# ssh -p 2222 xiaozhang@192.168.1.1 xiaozhang@192.168.1.1's password: //输入密码 [xiaozhang@fuwuduan ~]$ //登陆成功
[root@kehuduan ~]# scp root@192.168.1.1:/etc/passwd /mnt //从服务器下载文件 root@192.168.1.1's password: passwd 100% 2360 2.3KB/s 00:00 [root@kehuduan ~]# scp 123.txt root@192.168.1.1:/mnt //从客户端上传文件 root@192.168.1.1's password: 123.txt 100% 0 0.0KB/s 00:00
若是须要指定端口,使用“-P”选项!
经过sftp命令能够利用SSH安全链接与远程主机上传、下载文件,采用了与FTP相似的登陆过程和交互式环境,便于目录资源管理。
[root@kehuduan ~]# sftp root@192.168.1.1 root@192.168.1.1's password: Connected to 192.168.1.1. sftp> put 456.txt //上传文件 Uploading 456.txt to /root/456.txt 456.txt 100% 0 0.0KB/s 00:00 sftp> get /root/789.txt //下载文件 Fetching /root/789.txt to 789.txt sftp> bye
在Windows主机上可使用一些列图形化工具Xshell、Putty等图形工具,支持Telnet、SSH、SFTP等协议,方便对Linux主机进行远程管理。这些图形化工具都提供了中文界面、功能和操做比较简单,这里再也不作深刻介绍。
密钥对验证方式能够为远程登陆提供提供更好的安全性,流程图:
1.在客户端建立密钥对
在LInux客户端中,经过ssh-keygen工具为当前用户建立密钥对文件,可用的加密算法为ECDSA或DSA(ssh-keygen命令的“-t”选项用于指定算法类型)
root@kehuduan ~]# su - xiaowang //切换到用户xioawang [xiaowang@kehuduan ~]$ ssh-keygen -t ecdsa //建立基于ECDSA算法的SSH密钥对 Generating public/private ecdsa key pair. Enter file in which to save the key (/home/xiaowang/.ssh/id_ecdsa): //指定私钥存放位置 Created directory '/home/xiaowang/.ssh'. Enter passphrase (empty for no passphrase): //设置私钥短语 Enter same passphrase again: //确认所设置的短语 Your identification has been saved in /home/xiaowang/.ssh/id_ecdsa. Your public key has been saved in /home/xiaowang/.ssh/id_ecdsa.pub. The key fingerprint is: 13:c2:03:63:bc:2e:d8:7e:be:f1:1b:1d:95:6b:4c:49 xiaowang@kehuduan The key's randomart image is: +--[ECDSA 256]---+ | .+ E | | ..+ . o | | .+ . = | | . o = . | | o . S + | |. o . . + | | . .. . . | | . .o . | | oo.o. | +-----------------+ [xiaowang@kehuduan ~]$ ls -lh ~/.ssh/id_ecdsa* -rw-------. 1 xiaowang xiaowang 227 8月 8 16:45 /home/xiaowang/.ssh/id_ecdsa -rw-r--r--. 1 xiaowang xiaowang 179 8月 8 16:45 /home/xiaowang/.ssh/id_ecdsa.pub
新生成的密钥对文件中,id_ecdsa是私钥文件 ,权限为600,需妥善保管;id_ecdsa.pub是公钥文件,用来提供给SSH服务器。
2.将公钥文件上传至服务器
将刚才生成的公钥文件上传到服务端用户的公钥数据库中。
[xiaowang@kehuduan ~]$ scp ~/.ssh/id_ecdsa.pub root@192.168.1.1:/mnt root@192.168.1.1's password: //输入密码 id_ecdsa.pub 100% 179 0.2KB/s 00:00 //上传成功
3.在服务器中导入公钥文本
在服务器中,目标用户(指用户远程登陆的帐号)的公钥数据库位于~/.ssh目录,默认的文件名“authorized_keys”,须要本身手动建立!
[root@fuwuduan ~]# mkdir /home/xiaozhang/.ssh [root@fuwuduan ~]# cat /mnt/id_ecdsa.pub >> /home/xiaozhang/.ssh/authorized_keys [root@fuwuduan ~]# cat /home/xiaozhang/.ssh/authorized_keys ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJmtmVbjnjH6NbWBRQcFjbYHoDBILQYclqrIHbVe0oyA15IXd+WBGsOcX3FYX8FYnIPHfL36Auj7aWb2MuVqmac= xiaowang@kehuduan
4.在客户端使用密钥对验证
[xiaowang@kehuduan ~]$ ssh xiaozhang@192.168.1.1 Last login: Thu Aug 8 16:03:33 2019 from 192.168.1.2 //不用输入密码,便可链接,实验完成!
[root@kehuduan ~]# ssh-keygen -t ecdsa //以root为例,生成root用户的密钥对文件 [root@kehuduan ~]# ssh-copy-id -i ~/.ssh/id_ecdsa.pub root@192.168.1.1 //“-i”用来指定公钥文件,这一步把刚才第2、三步结合在一块儿 /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /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.1.1's password: //输入服务端root用户密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.1'" and check to make sure that only the key(s) you wanted were added. [root@kehuduan ~]# ssh root@192.168.1.1 Last login: Thu Aug 8 17:03:20 2019 //验证明验效果
使用密钥对验证的方式登陆时,不须要知道目标用户的密码,而是验证客户端用户的私钥短语并检查私钥、公钥是否配对,这样安全性更好。
TCP Wrappers将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增长了一个安全监测过程,外联的链接请求必须先经过这层安全监测,得到许可证才能访问真正的服务程序。如图:
对于大多数Linux发行版,TCP Wrappers是默认提供的功能。CentOS 7.3使用的软件包是tcp_wrappers-7.6-77.el7.x86_64.rpm。
对应TCP Wrappers保护机制的两种实现方式: 1.直接使用tcpd程序对其余服务程序进行保护,须要运行tcpd; 2.由其余网络服务程序调用libwrap.so.*连接库,不须要运行tcpd程序。 一般,连接库方式的应用要更为普遍,也更有效率。
TCP Wrappers机制的保护对象为各类网络服务程序,针对访问服务的客户端地址进行访问控制,对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny ,分别用阿里设置容许和拒绝的策略。
服务列表:客户机地址列表
服务器程序列表,客户端地址列表之间用冒号进行分隔,在列表内的多个项之间用逗号分隔。
1)服务程序列表
2)客户端地址列表
先检查hosts.allow,找到匹配则容许访问 不然再检查hosts.deny,找到则拒绝访问 若两个文件中均无匹配策略,则默认容许访问
要求:但愿仅容许192.168.1.0网段的主机访问sshd服务
[root@fuwuduan ~]# vim /etc/hosts.allow sshd:192.168.1. [root@fuwuduan ~]# vim /etc/hosts.deny sshd:ALL