5.ssh 安全远程管理

5.1 什么是 ssh

ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh 是目前较为可靠的传输协议,专为 远程登录会话和其他网络服务提供安全性。利用 ssh 协议可以有效防止远程管理过程中的信息泄露问题。 ssh可用于大多数UNIX和类UNIX操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式 在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。

5.2 ssh 的登录验证模式

ssh 提供了基于账户密码(口令)和密钥对两种登录验证方式,这两者都是通过密文传输数据的。


账户密码验证:

 5. ssh 安全远程管理 _密钥对

账户密码登录认证过程中传输的是用户的账户名和密码,密码具有足够的复杂度才能具有更高的安全性。

Linux主机之间的远程管理工具是ssh命令,所以我们直接使用ssh进行远程登录格式:

ssh 用户名@IP地址

    ssh root@192.168.1.201

windows远程登录Linux主机一般使用第三方工具,比如Xshell等工具密钥对验证:

5. ssh 安全远程管理 _服务器_02

1.  首先需要在 Client 上创建一对密钥,并且需要把公钥放在需要访问的 Server 上

2.   当 Client 需要连接 Server 时,Client 端的软件就会向 Server 端发出登录请求,请求使用密钥对中的的公钥进行安全验证

3.   Server 收到请求之后,会在该用户的家目录下查询公钥文件,拿 Client 发送过来的公钥和自己家目录下的公钥进行比较

4.   如果两个公钥一致,Server 就用公钥加密“challenge(质疑)”,并把它发送给 Client 软件。Client收到加密内容之后,使用本地的私钥进行解密,再把解密结果发送给 Server 端,Server 端验证成功后,允许登录注意:若第3个步骤对比结果失败,则 Server 端会通知 Client 端此公钥未在本机注册,无法验证登录

5. ssh 安全远程管理 _服务器_03


5.3 配置 ssh 服务

5.3.1 环境准备

准备好两台Linux操作系统的主机,配置好相关网络参数,实现可以正常通信,并将主机名修改为不同的名字

 

临时关闭防护功能:

      iptables -F #清空防火墙规则

     setenforce 0 #临时关闭SELinux 永久关闭防护功能:

     chkconfig iptables off                                  #设置防火墙开机不自启动      sed -i ‘7s/enforcing/disabled/’ /etc/selinux/config  #永久关闭SELinux  注意:以上两条命令执行后,需要重启服务器才能生效,切记

5.3.2用户密码验证

Linux主机之间的远程管理工具是ssh命令,所以我们直接使用ssh进行远程登录格式:

ssh 用户名@IP地址

    ssh root@192.168.88.20

windows远程登录Linux主机一般使用第三方工具,比如Xshell等工具格式:

    ssh root@192.168.88.20

5.3.3密钥对验证

Linux 主机之间的密钥对登录验证

1.  客户端生成密钥对文件

ssh-keygen -t rsa -b 2048

-t 指定加密类型(rsa/dsa等)

-b 指定密钥对加密长度

询问1:执行过程中会询问保存位置,一般默认保存在当前用户家目录下的.ssh/目录下询问2:是否对密钥文件进行加密

  加密:若加密,则在调用密钥文件时需要先验证密钥的密码,密码正确才能使用密钥文件

  不加密:若不加密,则密钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录

2.  将公钥文件上传至服务器端

ssh-copy-id 用户名@服务器IP地址

#该用户名和要用来登录服务器的用户名一致

3.  客户端尝试登录服务器

ssh 用户名@服务器IP地址

#密钥对验证优先级大于账户密码验证

 

Windows使用密钥对登录Linux

1.  使用Xshell自带的密钥对生成向导生成密钥对

5. ssh 安全远程管理 _linux_04

2.   将公钥导入Linux主机的指定用户下的指定公钥配置文件内后面用哪个用户登录就放在谁家里,这里我们先用root用户做实验

在root家目录下,找到 .ssh 目录,然后在里面创建 authorized_keys 文件,并且将公钥写入进去

3.  使用windows尝试登录指定用户

5.3.4禁止使用密码登录

当我们学会了使用密钥对进行验证后,建议生产环境下将账户密码登录功能关掉配置文件:/etc/ssh/sshd_config 选项:

     PasswordAuthentication no

注意:ssh的配置文件中,并不是注释掉的就是不生效的,有些是默认生效,需要修改时一定要取消注释再修改

5.3.5 禁止使用 root 远程登录

root 在系统中是一个可以为所欲为的角色,我们可以在平时的操作中用普通用户操作,在有需要修改一些系统设置的时候再从普通用户切换到root 用户,这样可以最大限度的避免因为误操作而对系统造成破坏,同时也可以避免黑客在暴力后直接使用 root 用户登录系统,一般在远程登录管理上我们会禁止直接使用 root用户登录配置文件:/etc/ssh/sshd_config 选项:

        PermitRootLogin no

5.3.6修改默认端口、限制 ssh监听 IP

修改默认端口:ssh 作为一个用来远程管理服务器的工具,需要特别的安全,默认情况下使用TCP的22端口,若不进行

修改,很容易被利用遭到,所以我们一般都会修改端口,尽量修改一个高位端口(范围1-65535)配置文件:/etc/ssh/sshd_config

选项:

    Port     59527

    ssh     -p 端口 用户名@服务器IP

 

限制ssh监听IP:有些服务器则安全级别更高一些,不允许使用外网直接登录,只有通过局域网才能登录,我们可以在机房里设置其中一台能够被外网远程连接,其他的主机都通过这个机器进行远程连接即可配置文件:/etc/ssh/sshd_config 选项:

ListenAddress 192.168.88.100

5.4 ssh 服务相关命令

scp:安全的远程文件复制命令

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,类似于命令有cp,scp传输是加密的,所以可能会稍微影响一点速度。另外,scp还非常不占资源,不会提高多少系统负荷格式:scp 本地文件 用户名@服务器IP:目录

     scp /root/atguigu.txt root@192.168.88.20:/tmp           

     -P 端口          #若端口不是默认22,则需要使用此格式指定端口

 

sftp:安全的文件传输协议

sftp是Secure FileTransferProtocol的缩写,安全文件传送协议。sftp与ftp有着几乎一样的语法和功能。由于这种传输方式使用了加密/解密技术,所以sftp比ftp更安全一些,但传输效率比普通的FTP要低得多

格式:sftp 用户名@服务器IP   

sftp 

         -oPort=端口  #若端口不是默认22,则需要使用此格式指定端口

交互命令:

help:查看在交互模式下支持哪些命令

pwd/lpwd:pwd是查看服务器所在路径;lpwd是查看客户端所在路径

ls/lls:ls是查看服务器当前目录下的文件列表;lls是查看客户机当前所在路径的所有文件列表

put:将客户机中的指定文件上传到服务器端

get:将服务器端的指定文件下载到客户机的当前所在目录

rm:删除掉服务器端的指定文件

quit:退出sftp的交互模式,断开和服务器之间的连接