
深入了解ssh协议与sshd服务程序的理论知识,掌握对Linux系统的远程管理方法以及对Linux系统中服务程序的配置方法,实践操作基于密钥验证的sshd服务程序远程验证登陆,并学习使用screen服务程序实现远程管理Linux系统的不间断会话等技术,当同学们掌握了本章节内的知识后,就已经基本完全拥有了对Linux系统的配置管理能力,未来章节中将会陆续引入大量实用服务配置课程,让您能够对大多数生产环境中用到的热门服务程序有广泛的了解。想要了解更多关于windows,linux的知识可以去《linux就该这么学》看看。
配置sshd服务
SSH(Secure Shell)是一种能够提供安全远程登录会话的协议,也是目前远程管理Linux系统最首选的方式,因为传统的ftp或telnet服务是不安全的,它们会将帐号口令和数据资料等数据在网络中以明文的形式进行传送,这种数据传输方式很容易受到黑客“中间人”的嗅探攻击,轻则篡改了传输的数据信息,重则直接抓取到了服务器的帐号密码。
因为在Linux系统中的一切都是文件,因此要想在Linux系统中修改服务程序的运行参数,实际上也是在修改程序配置文件的过程,sshd服务的配置信息保存在/etc/ssh/sshd_config文件中,运维人员一般会把保存着最主要配置信息的文件称为主配置文件,而配置文件中有许多#(井号)开头的注释行,要想让这些配置参数能够生效,咱们需要修改参数后再去掉前面的井号才行,sshd服务配置文件中重要的参数包括有:
编辑
参数作用
#Port 22默认的sshd服务端口。
#ListenAddress 0.0.0.0设定sshd服务端监听的IP地址。
#Protocol 2SSH协议的版本号。
#HostKey /etc/ssh/ssh_host_keySSH协议版本为1时,私钥存放的位置。
HostKey /etc/ssh/ssh_host_rsa_keySSH协议版本为2时,RSA私钥存放的位置。
#HostKey /etc/ssh/ssh_host_dsa_keySSH协议版本为2时,DSA私钥存放的位置。
#PermitRootLogin yes设定是否允许root用户直接登录。
#StrictModes yes当远程用户私钥改变时则直接拒绝连接。
#MaxAuthTries 6最大密码尝试次数
#MaxSessions 10最大终端数
#PasswordAuthentication yes是否允许密码验证
#PermitEmptyPasswords no是否允许空密码登陆(很不安全)
在红帽RHEL7系统中sshd服务程序已经默认安装好并启动了,咱们可以使用ssh命令来进行远程连接,格式为“ssh [参数] 主机IP地址”,退出登陆则可执行exit命令:
[root@linuxprobe ~]# ssh 192.168.10.20
The authenticity of host '192.168.10.20 (192.168.10.20)' can't be established.
ECDSA key fingerprint is 4f:a7:91:9e:8d:6f:b9:48:02:32:61:95:48:ed:1e:3f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.20' (ECDSA) to the list of known hosts.
root@192.168.10.20's password:此处输入远程主机root用户的密码
Last login: Wed Apr 15 15:54:21 2017 from 192.168.10.10
[root@linuxprobe ~]#
[root@linuxprobe ~]# exit
logoutConnection to 192.168.10.10 closed.
不要忘记一件重要的事情,一般的服务程序并不会在咱们修改配置文件后就立即获取到了最新的运行参数,如果想让新的配置文件起效,咱们需要手动的重启一下服务程序才行,并且最好也能将这个服务程序加入到开机启动项中,这样使得下一次重启时sshd服务程序会自动运行。
[root@linuxprobe ~]# systemctl restart sshd
[root@linuxprobe ~]# systemctl enable sshd
超级管理员root用户再来尝试连接sshd服务程序就会提示不可访问的错误信息了,虽然sshd服务程序的参数相对比较简单,但这就是Linux系统中配置服务程序的正确方法,同学们只要能做到活学活用,那即便以后遇到了没见过的服务也一样能够配置了~
[root@linuxprobe ~]# ssh 192.168.10.10
root@192.168.10.10's password:此处输入远程主机root用户的密码
Permission denied, please try again.
安全密钥验证
加密算法是对信息进行编码和解码的技术,它能够将原本可直接阅读的明文信息通过一定的加密算法译成密文形式,密钥即是密文的钥匙,包括有私钥和公钥之分,在日常工作中如果担心传送的数据被他人监听截获到,就可以在传送前先使用公钥进行加密处理,然后再进行数据传送,这样只有掌握私钥的用户才能解密这段数据,除此之外其他人即便截获了数据内容一般也很难再破译成明文信息。总结来说,日常生产环境中使用密码进行口令验证终归存在着被骇客暴力破解或嗅探截获的风险,如果正确的配置密钥验证方式,那么一定会让您的sshd服务程序更加的安全。
第1步:在本地主机中生成“密钥对”并将公钥传送到远程服务器中:
[root@linuxprobe ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):直接敲击回车或设置密钥的存储路径
Created directory '/root/.ssh'.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:
40:32:48:18:e4:ac:c0:c3:c1:ba:7c:6c:3a:a8:b5:22 root@linuxprobe.com
第2步:将生成好的公钥文件传送至远程主机:
[root@linuxprobe ~]# ssh-copy-id 192.168.10.20
The authenticity of host '192.168.10.20 (192.168.10.20)' can't be established.
ECDSA key fingerprint is 4f:a7:91:9e:8d:6f:b9:48:02:32:61:95:48:ed:1e:3f.
Are you sure you want to continue connecting (yes/no)? yes
/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.10.20's password:此处输入远程服务器主机密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.10.20'"
and check to make sure that only the key(s) you wanted were added.
第3步:设置服务器主机只允许密钥验证,拒绝传统口令验证方式,记得修改配置文件后保存并重启sshd服务程序哦~:
[root@linuxprobe ~]# vim /etc/ssh/sshd_config
………………省略部分输出信息………………
74
75 # To disable tunneled clear text passwords, change to no here!
76 #PasswordAuthentication yes
77 #PermitEmptyPasswords no
78 PasswordAuthentication no
79
………………省略部分输出信息………………
[root@linuxprobe ~]# systemctl restart sshd
第4步:在客户端主机尝试登陆到服务端主机,此时无需输入密码口令也可直接验证登陆成功:
[root@linuxprobe ~]# ssh 192.168.10.20
Last login: Mon Apr 13 19:34:13 2017
不间断会话服务
大家学完了ssh服务后有没有发现一个很重要的事情——当远程连接的终端被关闭时,运行在对方服务器上的命令也会随之中断。简单来说,如果咱们在执行打包文件的命令,或者是正在用脚本安装某个服务程序,通常中途是绝对不能关闭远程窗口或断开网络链接的,即便是网络不稳定的波动情况都有可能导致任务被中断,只能重新远程链接到服务器再重新开始任务。还有些时候比如咱们正在执行打包文件的命令,又同时想用脚本来安装某个服务程序,这个时候因为打包文件的命令会占用了咱们的终端界面,所以咱们只能再额外打开一个远程控制窗口,久而久之了,难免会忘记那个远程窗口是做什么用的了。
Screen是一款由GNU开源计划开发的多视窗远程控制管理服务,简单来说就是为了解决上述情况中网络异常中断或同时控制多个远程窗口而设计的程序。Screen服务程序不仅能够解决上述问题,而且用户在使用过程中还可以同时在多个终端会话中自由切换,能够做到会话恢复——即便网络中断,也可让会话随时恢复,用户不会失去对命令终端的控制,多窗口——每个会话都是独立运行的,拥有各自独立的编码、输入输出和窗口缓存,会话共享——可以使多个用户从不同终端使用同一个会话,也可让他们看到完全相同的输出信息的。
Screen服务程序在红帽RHEL7系统中并没有默认安装,因此咱们需要配置yum仓库来安装这款软件,首先第1步请同学们如图9-12所示,将虚拟机中的CD/DVD光盘选项中选择到下载好的系统iso镜像。
