【讲清楚,说明白!】使用SSH安全管理远程主机
作者:互联网
目录:
(一)ssh的基本用法
(二)如何打开图形化界面
(三)ssh的密钥认证及安全管理
(四)通过VNC访问远程桌面
ssh为secure shell的缩写,由IETF网络小组(Network Working Group)所制定;ssh为建立在应用层基础上的安全协议。ssh是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用ssh协议可以有效防止远程管理过程中的信息泄露问题,ssh最初是Unix系统上的一个程序,后来又迅速扩展到其他操作平台,ssh在正确使用时可弥补网络中的漏洞,ssh客户端适用于多种平台。几乎所有Unix平台--包括HP-UX、Linux、AIX、Solaris、Digital Unix、IRIX,以及其他平台,都可运行ssh。
传统的网络服务程序如:FTP、POP和Telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是容易受到“中间人”(man-in-the-middle)这种方式的attack。所谓“中间人”的attack方式,就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后在冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用ssh,你可以把所有传输的数据进行加密,这样“中间人”这种attack方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用ssh,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。ssh有很多功能,它既可以代替Telnet,又可以为FTP、POP甚至为PPP提供一个安全的“通道”。
(一)ssh的基本用法
(1.1)一般我们使用的客户端主要包括Linux客户端和Windows客户端,当我们连接ssh服务的时候,在Linux客户端我们可以使用Linux系统自带的GNOME终端,非常的方便好用;而在Windows客户端中我们连接ssh服务器时最常使用的客户端工具主要有putty、xshell、secureCRT等,在此处我们使用的是xshell客户端。
(1.2)一般我们连接ssh服务器的语法是“# ssh 远端的IP”,现在我们希望vms002主机通过ssh连接到vms001主机,我们可以使用# ssh vms001进行连接。
(1.3)当某用户第一次ssh连接服务器的时候,此时客户端是要把服务器的指纹信息记录起来以做标记,在后续登录的时候,客户端都必须要检查这个指纹信息,而这个指纹信息是存放在客户端的家目录下的.ssh/目录中的known_hosts文件中的。后续此客户端再连接ssh服务器的时候就不需要在进行(yes/no)的选择了,如果我们将known_hosts文件中的内容清空了,此时再次连接ssh服务器的时候就又会进行(yes/no)的选择了。
# cat .ssh/known_hosts
(1.4)而在服务器端公钥指纹信息是存放在/etc/ssh目录下的,我们将服务器中/etc/ssh目录下所有的ssh_host_*开头的文件全部删除,然后将sshd服务重启后会重新生成/etc/ssh目录下的文件(图1-5),此时如果我们再从vms002主机尝试连接到vms001主机的ssh服务上,发现并不能正常的连接(图1-6)。此时我们需要做的是将vms002主机的当前家目录下的.ssh/knownhosts文件中的指纹信息清除,此时vms002主机便可以正常的登录到vms001主机的ssh服务了(图1-7和图1-8)。
# ls /etc/ssh
# rm -rf /etc/ssh/ssh_host\*
# systemctl restart sshd
(1.5)当我们使用vms002主机直接登录vms001的时候,系统会提示无法登录成功,这是由于在vms001主机并不存在jerry用户,而当vms002主机使用ssh登录的时候,由于没有指定用户名,所有默认使用了当前登录vms002主机的用户名jerry。
(1.6)当vms002主机使用ssh登录vms001主机的时候,可以使用两种方式“-l 用户名 主机地址”指定登录ssh服务的用户名,或者使用“用户名@主机地址”的格式登录系统(图1-11)。以上的两种方式都是使用Linux客户端登录ssh服务的常用方法。
# ssh -l tom vms001
# ssh tom@vms001
(1.7)如果我们使用Windows客户端登录ssh服务的时候,我们在xshell客户端使用的登录格式为“# ssh tom@192.168.26.101”,我们客户端的密钥信息主要是存放在“主机密钥管理者”,此处都是客户端登录ssh服务后,保存的密钥信息。
(1.8)点击“文件”--“属性”--“用户身份验证”,此处我们可以添加常见用户的用户名和密码信息,这样我们后续登录ssh服务的时候,就可以相对简单快捷了。我们选择“隧道”--“x11转移”,此处我们的正常配置是勾选“转发x11连接到”,同时选择“Xmanager”(图1-16)。接着“键盘”--“DELETE键序列”选择第一个,“键盘”--“BACKSPACE键序列”选择第二个(图1-17)。ssh工具设置,xsehll配置,xmanager
(1.9)接着我们选择“工具”--“选项”--“键盘和鼠标”按照图中的方式进行设置,这样日常的使用中会比较快捷方便(图1-18)。“工具”--“选项”--“高级”的部分我们可以对终端进行相关的设置(图1-19)。
(1.10)有时候我们希望能够远程执行某命令,并不想ssh登录其他的服务器,此时我们可以使用远程执行命令的方式处理(图1-20)。由于登录远程主机的密钥信息是存放在家目录下的.ssh/known_hosts文件中的,所以每次ssh登录一台新的服务器的时候都会进行(yes/no)的确认信息,我们应该在vms002主机的/etc/ssh/ssh_config配置文件中进行设置,将“StrictHostKeyChecking”的值设置为no,表示vms002主机ssh登录到vms001主机时不进行询问(图1-22)。
# ssh vms001 'hostname'---远程查询vms001主机名
# ssh vms001 'reboot'---远程重启vms001主机
(二)如何打开图形化界面
(2.1)有时候我们从客户端ssh到远端服务器的时候是需要打开图形化的界面的,例如我们从vms002主机远程登录到vms001主机,并尝试打开firefox浏览器时,发现系统报错,无法打开程序(图1-23)。如果我们希望能够打开图形化界面,我们应该尝试从三个方面来进行考虑和处理(注意三点):①ssh建立的连接要允许传输xclient,即允许客户端的ssh能够接收服务器端传递来的xclient,其中xclient代表的是运行系统中的各种终端界面,例如GNOME窗体,Firefox窗体等,xclient是依赖于xserver的,所以系统必须要有xserver,才可以运行xclent,当我们客户端是Linux系统时,我们在ssh连接到服务器的时候需要加上“-X”(图1-23-1);②ssh客户端这边必须要有xserver,在装RHEL系统的时候,装了图形化界面,那么xserver就会正常运行;③ssh服务器这边也要允许本机的xclient在其他机器上运行,由于small主机是使用最小化安装的方式安装的系统,所以需要在ssh服务器端安装xorg-x11-xauth.x86_64(*x*auth*)软件包(图2-9)。三步、排错、排查
(2.2)注意(经验总结):现在我们创建一台最小化安装系统的small虚拟机,设置硬盘的大小为8G,其中“/”根分区的大小是6G,swap交换分区的大小为2G,使用最小化安装系统的方式进行安装。首相将光盘镜像/dev/cdrom挂载到/mnt目录下,接着到/etc/yum.repos.d目录下创建一个aa.repo仓库文件,由于vim编辑器不存在,我们使用vi进行编辑,填写如上的YUM源信息(图2-2),然后我们将ifconfig命令的工具包安装起来(图2-3),我们发现此时最小化安装的系统并没有配置网络信息,我们开始编辑eno16777728的网卡信息,配置相关的网络,其中IP地址为192.168.26.103,并重启网络(图2-5)。接着我们可以给主机设置一个主机名,并在/etc/hosts文件配置好相关的IP地址和主机名的对应信息(图2-6)。
# systemctl restart network
(2.3)我们尝试从vms002主机ssh远程连接到small主机上,我们同时在small主机上安装Firefox软件(图2-7),接着我们在vms002主机上发现连接到small主机后仍然无法打开Firefox浏览器(图2-8),此时我们在small主机上将xserver软件包安装起来(图2-9),此时我们发现已经可以在vms002主机正常的打开small主机上的浏览器软件了,由于我们是最小化安装系统,很多的字体都没有,此时我们需要将相关的字体安装到small主机中,我们进入到Windows主机的C:\Windows\Fonts目录中将相关的字体文件(简体)拷贝到vms002主机中(图2-11),同时我们在small主机上创建了/usr/share/fonts/zh_CN/TrueType目录后,将SIMHEI.TTF字体文件从vms002主机拷贝到small主机上(图2-13),此时我们再次从vms002主机ssh连接到small主机上,并打开Firefox软件时,可以发现已经显示正常的字体信息了(图2-14)。
注意:我们在vms002主机的/etc/hosts文件中也需要配置IP地址和主机名的对应信息
# mkdir -p /usr/share/fonts/zh_CN/TrueType
(三)ssh的密钥认证及安全管理
(3.1)ssh服务登录的验证方式可以分为两类:密码验证和密钥验证。通常情况下,我们所使用的登录方式都是密码验证(图3-1)。但是有时候我们在使用其他工具或者软件是基于ssh服务建立的,例如Ansible在远程批量自动化管理服务器的时候会使用ssh服务进行安全连接,我们平时使用的scp远程拷贝是基于ssh服务建立的,rsync命令也是基于ssh服务构建的,有时候我们的需求是希望能够不用密码登录,直接通过验证就能够登录,此时我们就需要使用密钥验证的登录方式了。
(3.2)我们在使用密钥验证的时候一般使用的是非对称加密技术,非对称加密一般会有一个密钥对,包含公钥和私钥,公钥是可以对外公开的,私钥是需要持有人自己保护好。例如现在我们有两台主机A和B,其中主机A有密钥对A公和A私,B主机可以从公开的网络中获取A公,此时主机B将需要传送的数据用获取的A公加密数据,然后再将加密的数据发送给A主机,此时主机A使用自己保存的A私便可以解密数据了,而且这个过程是不怕互联网中被其他人截获的。
(3.3)现在我们使用vms002主机的jerry用户,使用ssh远程登录到vms001主机的root用户,在登录的过程中使用密钥验证,不需要密码。我们先配置无密码登录(ssh信任关系),在在vms002主机的jerry用户下生成一个密钥对(公钥+私钥),默认是存放在家目录下的.ssh/目录下的(图3-3),接着我们把生成的公钥传递到vms001主机的root里作为“信物”(图3-4),此时我们便可以在vms001主机上看到了authorized_keys公钥文件了(图3-5),我们在vms002主机的jerry用户下查看公钥信息,发现和vms001主机中root用户的authorized_keys信息是一致的(图3-6),此时我们从vms002主机通过ssh登录到vms001主机时,就不需要密码直接可以登录了。
# ssh-keygen---生成一个密钥对
# ssh-copy-id root@vms001---将公钥信息拷贝到vms001主机的root用户里(第一种方式)
# ssh-copy-id -i .ssh/id_rsa.pub root@vms001---使用“-i”指定公钥在vms002主机生成后存放的位置的(第二种方式)
(3.4)ssh验证登录流程如下:首先vms002主机的jerry用户会把自己公钥内容发送到vms001主机root里;接着root用户收到之后会进行对比,如果公钥验证不一样,则终止密钥验证,并开始密码验证;如果对比了公钥是一样的,此时vms001主机上的root用户,会用jerry用户的公钥加密一个随机的字符串,并发送给vms002主机的jerry用户,让jerry用户用自己的私钥进行解密,如果jerry用户解密成功说明对方是真正的vms002主机的jerry用户,便可以正常的登录vms001主机了,如果jerry用户解密不成功,说明身份不正确即有远程连接需求的用户并不是真正的jerry用户。
(3.5)现在我们把vms001主机root用户里的authorized_keys文件中的公钥信息删除,并在vms002主机的jerry用户重新生成一对密钥,此时我们给创建的私钥设置一个密码:123456,并将vms002主机jerry用户生成的公钥拷贝到vms001主机的root用户里(图3-8),此时我们从vms002主机ssh远程连接到vms001主机时是需要输入正确的解密私钥的密码信息才可以正常的登录远程连接的(图3-10)。私钥解密
注意:在我们使用ssh-keygen生成的密钥对中,id_rsa表示的是私钥,id_rsa.pub表示的是公钥,而id_rsa除了包含私钥,同时还包含公钥的信息,所以这个id_rsa拷贝到其他的主机目录时,其他主机也就可以实现密钥验证无密码登录了,所以防范风险的方法就是给私钥设置一个密码。
# rm -rf id_rsa*
# ssh-copy-id -i id_rsa.pub root@192.168.26.101
(3.6)如果我们不需要给私钥设置密码时,在使用ssh-keygen生成的密钥对时,直接回车就可以了,不过也可以使用“-N”并跟上一个引号的方式处理,此时我们就可以直接跳过给私钥设置密码的步骤了,vms002主机在远程ssh连接到vms001主机的时候仍然是不需要输入任何的密码的。
# ssh-keygen -N ""
(3.7)接着我们来看ssh的安全管理,vms001主机的配置文件是在/etc/ssh/目录下的sshd_config中的,ssh默认的端口是22,如果端口修改了需要更改端口的上下文“# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER”,PasswordAuthentication这个参数表示是否允许密码用户登录,默认是yes允许,此处我们修改为no,不允许使用密码的用户登录(图3-13),由于jerry用户已经将公钥信息传递到了root用户的家目录,所以远程登录vms001主机时直接登录,由于jerry用户并没有将公钥信息传递到tom用户的家目录,所以远程登录时不允许让输密码的tom用户登录(图3-15)。
# ssh root@vms001
# ssh tom@vms001
(3.8)接着来看PubkeyAuthentication参数,代表的为是否允许密钥的方式进行验证,默认值是yes允许,此处我们修改为no不允许,修改完毕后将sshd服务重启一下(图3-16),此时我们使用tom用户密码ssh登录vms001主机发现是可以正常的登录的,虽然本机的jerry用户已经将密钥传递给vms001主机的root用户里,但是由于配置文件禁止使用密钥登录,所以此时vms002主机ssh连接到vms001主机的root用户也是使用密码验证(图3-17)。
(3.9)PermitRootLogin表示的为是否允许root用户登录,默认值为yes允许root用户登录,我们修改为no不允许root用户登录,并将sshd服务重启一下。此时我们使用tom用户登录vms001主机的ssh服务是可以正常的连接的,我们使用root用户登录vms001主机的时候,系统提示无法登录成功(图3-19)。
(3.10)如果我们需要限制ssh方式的用户登录我们可以使用“# man -k ssh”和“# man sshd_config”进行查询帮助,然后在/etc/ssh/sshd_config文件中使用如下的参数,以下修改完配置文件,必须重新启动ssh服务才能生效。如果我们希望启动或禁止用户IP登录,我们可以针对固定IP进行禁止登录,这里面其实就是修改配置文件,在/etc/hosts.allow和/etc/hosts.deny配置文件中设置允许登录的IP地址。
# AllowUsers tom
# AllowGroups jerry
# DenyUsers tom
# DenyGroups jerry
(3.11)有时候我们登录ssh服务进行连接时会非常的慢,此时我们应该在/etc/ssh/sshd_config配置文件中修改DNS参数,我们将UseDNS的值由yes修改为no,表示不使用dns查询,此时我们的ssh连接速度会大幅的提高
(四)通过VNC访问远程桌面
(4.1)有时候我们希望通过图形化界面的方式连接远程桌面,使用远程桌面端时候不同的产品使用的远程桌面的协议也是不同的,我们使用windows系统的远程桌面的时候使用一般是RDP协议,我们使用xendesktop系统的远程桌面的时候使用的是ICA协议,如果我们使用的是vmwarevie虚拟化产品的时候使用的是PCoIP协议,如果我们使用的是redhat系统连接的远程桌面使用的是vnc/spice协议。
(4.2)我们首先在vms001主机安装vnc的服务器端,设置防火墙为trusted,同时安装vnc的服务器端。
# firewall-cmd --set-default-zone=trusted---设置防火墙允许所有的流量通过
# yum install *vnc* -y
(4.3)我们输入“vncserver”,设置密码为redhatxxx,其中密码保存在~/.vnc/目录下的passwd文件中。如果我们想修改vnc的密码,则可以使用vncpasswd进行修改,然后我们发现创建的vnc服务器端是在1号端口。此时我们使用物理机的vnc客户端连接vms001主机时,可以正常的使用图形化界面连接成功
# vncserver---创建一个vnc主机
# vncpasswd---修改vnc的密码
# vncserver -list---查询vnc的创建桌面号信息
(4.4)我们将可以使用vncserver -kill将打开的图形化连接关闭。同时我们也可以指定打开的图形化界面的分辨率信息(图4-7)。
# vncserver -kill :1---可以将打开的1号桌面关闭掉
# vncserver -geometry 680x480 :1---设定打开的图形化界面的分辨率
# vncserver -geometry 1024x768 :1
(4.5)如果我们希望通过非root用户登录远程桌面,则可以先在vms001主机上切换到tom用户,然后再创建一个远程连接的2号桌面(图4-8)。
# su - tom---切换到tom用户
# vncserver :2---创建一个远程连接使用2号桌面打开
(4.6)我们还可以使用相对简洁统一的方式在vms001主机上进行设置vncserver的服务端,此时我们在物理机上使用vnc的客户端连接vms001主机的时候,就可以不用指定桌面号的信息了(图4-11),此时我们使用x0vncserver 的命令行方式设置vncserver,此时我们使用客户端连接后发现连接成功,并且界面也是事实更新的,此时我们在进行相关演示的时候是非常方便的。
# x0vncserver --passwordfile=.vnc/passwd
(4.7)在客户端工具VNC Viewer中,我们点开“选项”--“杂项”后有一个“共享连接”,我们在连接到vnc服务端的时候一般应该是要把它勾选起来再进行连接,如果没有勾选“共享连接”的时候,而同一时间段只允许一个客户端连接,如果我们的vnc服务端此时在进行教学演示,已经有100个用户使用vnc客户端连接过来学习,而此时没有勾选“共享连接”的客户端也连接过来了,就会将其他已经建立连接的客户端全部踢掉,影响使用。
(4.8)因为我们是无法去规定vnc客户端的使用规则的,此时我们如果需要让所有的远程连接都能正常的使用,则应该从vnc服务器端进行限制,我们通过如下的命令行实现。此时我们发现VNC客户端连接过来后鼠标和键盘的点击都是无效了且自动勾选了共享连接(图4-15)。在Linux系统中也是有VNC的客户端工具的,使用非常方便(图4-16和图4-17)。
# x0vncserver --passwordfile=.vnc/passwd --AlwaysShared --AcceptPointerEvents=0 --AcceptKeyEvents=0---AlwaysShared表示必须开启共享,AcceptPointerEvents表示不接收鼠标事件,AcceptKeyEvents表示不接收键盘事件
—————— 本文至此结束,感谢阅读 ——————
标签:讲清楚,登录,主机,我们,SSH,vms001,vms002,ssh 来源: https://blog.51cto.com/13613726/2458756