ssh是Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用ssh协议可以有效防止远程管理过程中的信息泄露问题。ssh可用于大多数UNIX和类UNIX操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。
5.2 ssh的登录验证模式ssh提供了基于账号密码(口令)和密钥对两种登录验证方式。这两者都是通过密文传播的。
账户密码登录认证过程中传输的是用户的账户名和密码,密码具有足够的复杂度才能具有更高的安全性。
Linux主机之间的远程登录管理工具是ssh命令,所以在命令行中直接使用ssh命令进行远程登录。
格式:ssh 用户名@IP地址
ssh root@192.168.80.20
windows远程登录Linux主机一般使用第三方工具,比如Xshell等工具。
1、首先需要在Client上创建一对密钥,并且需要把公钥放在需要访问的Server上
2、当Client需要连接Server时,Client端的软件就会向Server端发出登录请求,请求使用密钥对中的公钥进行安全验证
3、Server收到请求之后,会在该用户的家目录下查询公钥文件,拿Client发送过来的公钥和自己家目录下的公钥进行比较
4、如果两个公钥一致,Server就用公钥加密“challenge(质疑)”,并把它发送给Client软件。Client收到加密内容之后,使用本地的私钥进行解密,再把解密结果发送给Server端,Server端验证成功后,允许登录
注意:若第3个步骤对比结果失败,则Server端会通知Client端此公钥未在本机注册,无法验证登录
5.3.1 环境准备
(1)准备两台linux操作系统的主机,配置好相关网络参数,实现正常通信,并将主机名修改为不同的名字,便于分辨。
①# hostnamectl set-hostname www2(修改主机名为www2)
②reboot(重启电脑,使配置生效)
(2)关闭两台电脑的防火墙和SELinux策略,有利于实验的顺利进行。
①[root@www1 ~]# systemctl disable firewalld.service (设置firewalld服务的不自启动)
[root@www1 ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
②vim /etc/selinux/config(修改selinux配置文件)
“SELINUX=enforcing”修改为“SELINUX=disabled”
③reboot(重启电脑,使配置生效)
④systemctl status firewalld.service(查询firewalld服务是否启动)
[root@www1 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
⑤getenforce(查询SELinux是否关闭)
[root@www1 ~]# getenforce Disabled
至此,环境准备完成!!!
5.3.2 用户密码验证
Linux主机之间的远程管理工具是ssh命令,所以我们直接使用ssh进行远程登录
格式:ssh 用户名@ip地址
[root@hua ~]# ip addr #查询主机hua的IP地址 1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:ec:ec:90 brd ff:ff:ff:ff:ff:ff inet 192.168.31.50/24 brd 192.168.31.255 scope global noprefixroute ens33 #主机hua的IP地址为192.168.31.50 valid_lft forever preferred_lft forever inet6 fe80::b430:3b07:1365:fecb/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@hua ~]# ssh root@192.168.31.40 #在主机hua上远程登录192.168.31.40主机的root账号 root@192.168.31.40's password: #输入密码 Last login: Thu May 12 20:07:05 2022 from 192.168.31.50 [root@www2 ~]# ip addr #登录成功,主机名已经由hua变为www2 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:b6:d2:99 brd ff:ff:ff:ff:ff:ff inet 192.168.31.40/24 brd 192.168.31.255 scope global noprefixroute ens33 #主机www2的IP地址为192.168.31.40 valid_lft forever preferred_lft forever inet6 fe80::b430:3b07:1365:fecb/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::23df:84f4:8ba1:8550/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@www2 ~]# exit #退出登录www2的主机 登出 Connection to 192.168.31.40 closed. [root@hua ~]#
Windows远程登录Linux主机一般使用第三方工具,比如Xshell工具
格式:ssh 用户名@ip地址
5.3.3 密钥对验证
①客户端生成密钥对文件
ssh-keygen -t rsa -b 2048
选项:-t:指定加密类型(rsa/dsa等)一般用rsa
-b:指定密钥对加密长度(现在已经可以破解1024位长度以内的密码,建议设置为2048以上)
[root@www2 ~]# ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #询问秘钥文件保存位置,一般默认保存在当前用户家目录下的.ssh/目录下 Enter passphrase (empty for no passphrase): #询问是否对私钥文件进行加密;若加密,则在调用私钥文件时需要先验证私钥文件的密码,密码正确才能使用秘钥文件;若不加密,则秘钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录。本次设置密码执行 Enter same passphrase again: #再一次输入密码 Your identification has been saved in /root/.ssh/id_rsa. #身份证明保存在/root/.ssh/id_rsa中 Your public key has been saved in /root/.ssh/id_rsa.pub. #公钥文件保存/root/.ssh/id_rsa.pub The key fingerprint is: SHA256:iErnFeAZKugzLyTKdqN1pZpB2LPe7HFj9Kujr1ay9Zc root@www2 The key's randomart image is: +---[RSA 2048]----+ | o | |. o + | |o . o . | |..o . o | |.*.+o ooS | |=.=+oo+o. | |.+.B.+=+.. . | |. * Oo+....E | | . +o*+oo.. | +----[SHA256]-----+
②将客户端的公钥文件上传至服务器端(密钥对验证比账号密码验证更安全,但是密钥对验证需要建立在账号密码登录基础上进行的,就是说首先你得有账号密码,才能设置密钥对验证)
格式:ssh-copy-id 用户名@ip地址
[root@www2 .ssh]# ssh-copy-id root@192.168.31.50 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.31.50 (192.168.31.50)' can't be established. ECDSA key fingerprint is SHA256:wx588OtI9K8B0rHGSWaVdsMjixGdXd350+BZjU9F7pQ. ECDSA key fingerprint is MD5:fd:b9:dd:68:ed:70:71:ed:ee:bf:25:30:ab:3c:85:6b. 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.31.50's password: #输入账号登录密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.31.50'" and check to make sure that only the key(s) you wanted were added. [root@www2 .ssh]#
[root@hua ~]# cd /root/.ssh/ 服务器主机将客户端的公钥内容保存在/root/.ssh/authorized_keys中 [root@hua .ssh]# ls authorized_keys
③客户端尝试登录服务器
格式:ssh 用户名@ip地址
[root@www2 .ssh]# ssh root@192.168.31.50 #密钥对验证优先级大于账户密码验证,因此如果设置了密钥对,则不用再输入账号密码了 Enter passphrase for key '/root/.ssh/id_rsa': #输入私钥文件的密码,并不是服务器主机的账号密码 Last login: Thu May 12 20:21:39 2022 [root@hua ~]# ip addr #登录服务器主机hua成功 1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:ec:ec:90 brd ff:ff:ff:ff:ff:ff inet 192.168.31.50/24 brd 192.168.31.255 scope global noprefixroute ens33 #服务器主机 valid_lft forever preferred_lft forever inet6 fe80::b430:3b07:1365:fecb/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@hua ~]# exit #退出登录服务器主机hua 登出 Connection to 192.168.31.50 closed. [root@www2 .ssh]#
Windows使用密钥对登录Linux
1、使用Xshell自带的密钥对生成向导生成密钥对
2、将公钥导入Linux主机的指定用户下的指定公钥配置文件内(一般为/root/.ssh/authorized_keys;如果没有这个文件,则我们自己创建)
3、使用window尝试登录
5.3.4 禁止使用账号密码登录
当我们学会使用密钥对进行验证后,建议在生产环境中将账户密码登录功能关掉
修改服务器主机中的配置文件:/etc/ssh/sshd_config
内容:PasswordAuthentication no
5.3.5 禁止使用root远程登录
root在系统中是一个可以为所欲为的角色,我们可以在平时的操作中用普通用户操作,在有需要修改一些系统设置的时候再从普通用户切换到root用户,这样可以最大限度的避免因为root的误操作而对系统造成破坏,同时也可以避免黑客在暴力破解后直接使用root用户登录系统,一般在远程登录管理上我们会禁止直接使用root用户登录。
修改服务器主机中的配置文件:/etc/ssh/sshd_config
内容:PermitRootLogin no
5.3.6 修改默认端口、限制ssh监听IP
1、修改默认端口:ssh作为一个用来远程管理服务器的工具,需要特别的安全,默认情况下使用TCP的22端口,若不进行修改,很容易被利用遭到攻击,所以我们一般都会修改端口,尽量修改一个高位端口(范围1-65535)
修改服务器主机中的配置文件:/etc/ssh/sshd_config
内容:Port 55555
端口修改后远程登录命令:ssh -p 新端口 用户名@服务器IP地址
2、限制ssh监听IP:有些服务器安全级别更高一些,不允许外网直接登录,只有通过局域网才能登录,我们可以在机房中设置其中一台能够被外网远程连接,其他主机都通过这个机器进行远程连接即可
修改服务器主机中的配置文件:/etc/ssh/sshd_config
内容:LinstenAddress IP地址
5.4 ssh服务相关命令1、scp:安全的远程文件复制命令
scp是secure copy的简写,用于Linux系统之间的远程拷贝命令,类似于cp。scp传输是加密的,稍微影响速度,但并不占用资源。
格式:scp -P 端口 本地文件 (绝对路径) 用户名@服务器IP地址:目录
2、sftp:安全的文件传输协议
sftp是secure fileTransferProtocol 的缩写,安全文件传送协议。sftp与ftp有着几乎一样的语法和功能。由于这种传输方式使用了加密/解密技术。所以sftp比ftp更安全一些。但传输效率比普通的FTP低的多
格式:sftp -oPort=端口 用户名@服务器IP
交互命令:
help:查看在交互模式下支持哪些命令
pwd/lpwd:查看文件在服务器/客户端所在路径
ls/lls:查看服务器/客户端当前目录下的文件列表
put:将客户机中的指定文件上传到服务器端
get:将服务器端的指定文件下载到客户机的当前目录
rm:删除服务器端的指定文件
quit:退出sftp的交互模式,断开话服务器之间的连接
6.1 TCP Wrappers(简单防火墙)简介TCP Wrappers是一个工作在第四层(传输层)的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实线访问控制,界定方式是凡是调用libwrap.so库文件的程序就可以受TCP Wrappers的安全控制。他的主要功能就是控制谁可以访问,常见的程序有rpcbind/vsftpd/sshd/telnet。
判断方式:
步骤1:查看对应服务命令所在位置
which sshd
步骤2:查看指定命令执行时是否调用libwrap.so文件
ldd /usr/sbin/sshd | grep libwrap.so
6.2 TCP Wrappers工作原理以ssh为例,每当有ssh的连接请求时,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给ssh进程,由ssh完成后续工作;古国这次连接发起的ip不符合访问控制文件的设置,则会中断连接请求,拒绝提供ssh服务
1、优先查看hosts.allow,匹配即停止
2、允许个别,拒绝所有:hosts.allow文件添加允许的策略,host.deny文件添加all
3、拒绝个别,允许所有:hosts.allow文件为空,hosts.deny文件添加单个拒绝的策略
6.3 TCP Wrappers的使用TCP Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow,/etc/hosts.deny,以此实线访问控制,默认情况下,这两个文件什么都没有添加,此时没有限制
配置文件编写规则:
service_list@host:client_list
serxice_list:是程序(服务)的列表,可以是多个,多个时,使用“,”隔开
@host:设置允许或禁止他人从自己的哪个网口进入。这一项不写,就代表全部
client_list: 是访问者的地址,如果需要控制的用户较多,可以使用空格或“,”隔开
格式:
基于ip地址: 192.168.88.1 192.168.88.
基于主机名:www.atguigu.com www.baidu.com 较少用
基于网络、子网掩码: 192.168.0.0/255.255.255.0
内置ACL:ALL(所有主机)、LOCAL(本地主机)
案例:拒绝单个IP使用ssh远程连接
hosts.allow:空着
hosts.deny:sshd:192.168.88.20
仅允许单个IP使用ssh远程连接
hosts.allow:sshd:192.168.88.20
hosts.deny:ALL



