远程访问及控制SSH服务

远程访问及控制SSH服务

SSH服务

什么是SSH服务器

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

  1. 服务名称:sshd
  2. 服务端主程序:/usr/sbin/sshd
  3. 服务端配置文件:/etc/ssh/sshd_config
  4. 客户端配置文件:/etc/ssh/ssh_config

SSH优点

数据传输是加密的,可以防止信息泄露

数据传输是压缩的,可以提高传输速度

常见的SSH协议

客户端: Linux Client: ssh, scp, sftp,slogin Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient

OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。

Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。

执行"systemctl start sshd"命令即可启动sshd 服务

sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)

sshd服务的默认配置文件是/etc/ssh/sshd_config ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。

SSH原理

公钥传输原理

  • 首先需要在 Client 上创建一对密钥,并且需要把公钥放在需要访问的 Server 上。
  • 当 Client 需要连接 Server 时,Client 端的软件就会向 Server 端发出登录请求,请求使用密钥对中的的公钥进行安全验证
  • Server 收到请求之后,会在该用户的家目录下查询公钥文件,拿 Client 发送过来的公钥和自己家目录下的公钥 进行比较
  • 如果两个公钥一致,Server 就用公钥加密“challenge(质疑)”,并把它发送给 Client 软件。Client 收到加 密内容之后,使用本地的私钥进行解密,再把解密结果发送给 Server 端,Server 端验证成功后,允许登录

登录

登录方式一:

ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port

-p:指定端口号(默认多端口号为22一般情况下不需要加此选项)

示例:

登录方式二:

ssh -l [远程主机用户名] [远程服务器主机名或IP地址] -p port

-l:指定登录名称

服务端配置

1.sshd服务支持登录验证方式

密码验证: 以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。

密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。

  • 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;

  • 不能根据一个密码来推算出另一个密钥;

  • 公钥对外公开,私钥只有私钥的持有人才知道。

服务端配置文件的常用选项设置

[root@localhost ~]# vim /etc/ssh/sshd_config #编辑服务端配置文件
vim /etc/ssh/sshd_config
Port 22                 #默认监听端口为22(将此修改登录时则需要指定端口号)
ListenAddress 0.0.0.0           #监听地址为任意网段

LoginGraceTime 2m             #登录验证时间为2分钟
PermitRootLogin no            #禁止root用户登录
MaxAuthTries 6              #最大重试次数为 6

PermitEmptyPasswords no         #禁止空密码用户登录
UseDNS no                 #禁用 DNS 反向解析,以提高服务器的响应速度

黑白名单

允许或禁止某主机登录用户

白名单登录设置

指定主机远程登录

编辑服务端配置文件添加白用户登录设置

[root@localhost ~]# vim /etc/ssh/sshd_config

[root@localhost ~]# systemctl restart sshd   #重启服务

验证:

黑名单设置

编辑服务端配置文件添加黑用户登录设置

[root@localhost ~]# vim /etc/ssh/sshd_config

[root@localhost ~]# systemctl restart sshd   #重启服务

验证:

使用密钥对及免交互验证登录

示例:

scp命令

远程复制命令

命令格式:scp 选项 源文件 目标:目录

选项:

-r:复制文件夹

sftp命令

远程下载或上传

命令格式:sftp 登录用户@远程主机IP地址

不加用户的话默认为root

get:下载

put:上传

put -r:上传文件夹

示例:

TCP Wrappers访问控制

TCP Wrappers 将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。TCP Wrappers还可以记录所有企图访问被保护的服务行为,为管理员提供丰富的安全分析资料

访问控制的基本原理

首先检查hosts.allow文件,如果找到相匹配的策略,则允许访问,否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;如果检查上述两个文件都找不到相匹配的策略则允许访问

访问控制策略的配置文件

  • /etc/hosts.allow (允许)
  • /etc/hosts.deny (拒绝)

注意hosts.allow 的优先级要比hosts.deny优先级高

示例:1

[root@localhost etc]# vim hosts.allow  #编辑允许访问控制策略配置文件

[root@localhost etc]# vim hosts.deny   #编辑拒绝访问控制策略配置文件

示例:2

[root@localhost etc]# vim hosts.allow  #编辑允许访问控制策略配置文件

[root@localhost etc]# vim hosts.deny   #编辑拒绝访问控制策略配置文件

轻量级自动运维工具pssh

  • pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具,项目:http://code.google.com/p/parallel-ssh/

  • pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 可使用几种不同的远程shell服务,包括rsh,Kerberos IV和ssh,项目: https://pdsh.googlecode.com/

  • mussh:Multihost SSH wrapper,是一个shell脚本,允许使用命令在多个主机上通过ssh执行命令。 可使用ssh-agent和RSA/DSA密钥,以减少输入密码,项目:http://www.sourceforge.net/projects/mussh

pssh 命令选项如下:

-H:主机字符串,内容格式”[user@]host[:port]”

-h file:主机列表文件,内容格式”[user@]host[:port]”

-A:手动输入密码模式

-i:每个服务器内部处理信息输出

-l:登录使用的用户名 -p:并发的线程数【可选】

-o:输出的文件目录【可选】

-e:错误输出文件【可选】

-t:TIMEOUT 超时时间设置,0无限制【可选】

-O:SSH的选项

-P:打印出服务器返回信息

-v:详细模式

--version:查看版本

pssh配置

实验:批量创建多台服务器文件

示例:

posted @ 2022-03-20 21:34  GENGBO  阅读(157)  评论(0编辑  收藏  举报