首页 > 技术文章 > OpenSSH远程控制

flff 2020-03-16 22:41 原文

一、SSH 简介
   SSH(Secure Shell)是一种安全通道协议,只要用来实现字符界面的远程登陆、远程复制等功能。
   SSH协议默认监听端口:TCP协议  22
   SSH协议版本:V1、V2

服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/sshconfig
1.服务监听选项
vim   /etc/ssh/sshd_config
17  Port 22
#监听端口,建议修改为其他端口以提高在网络中的隐蔽性,一般不超过65535。
19  ListenAddress 192.168.200.111#监听IP地址,默认监听到0.0.0.0任意地址
20  protocol 2
#ssh协议的版本选用V2比V1的安全
性更好
116  UseDNS no
#禁用DNS反向解可以提高服务的响应速

93 GSSAPIAuthentication   no
#为了加快连接
systemctl    restart    sshd #重启ssh服务
2.用户登录控制
sshd服务默认允许root用户登录,但在Internet中使用时是非常不安全的。普遍的做法如下:先以普通用户远程登入,进入安全shell环境后,根据实际需要使用su命令切换为root用户。
vim    /etc/ssh/sshd_config
38 LoginGraceTime 10s #登录验证时间为10秒
39 PermitRootLogin no #禁止root用户登录
41 MaxAuthTries 3  #最大重试次数为3
65 PermitEmptyPasswords no #禁止空密码用户登录
OpenSSH服务访问控制
AllowUsers  仅允许用户登录
DenyUsers  仅禁止用户登录
注意:
1)Allow  Users不要与Deny  Users同时使用
2)当服务器在Internet时,控制包含的IP地址时应是公司公网地址
#一般来说拒绝用户是多于允许用户的,所以一般设置仅拒绝某些用户。
vim     /etc/ssh/sshd_config
AllowUsers user1  user2   user3@IP地址
#被允许的IP一般为公司的公网IP,这行内容在文件内添加即可。

3.登陆验证方式
密码验证
密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒:从服务器角度来看,当遭遇穷举(暴力破解)攻击时防御能力比较弱。
密钥对验证
密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在Shell中被广泛使用。
vim   /etc/ssh/sshd_config
66  PasswordAuthentication yes
#启用密码验证
44  PubkeyAuthentication yes
#启用密钥对验证
48  AuthorizedkeysFile ssh/authorized-keys
#指定公钥库文件(用于保存多个客户端上传的公钥文本)

二、使用客户端程序
openssh客户端由openssh-clients软件包提供,默认已安装。其中包括(ssh远程登录命令、scp远程复制命令、sftp远程文件传输命令等)。
1.命令程序
ssh命令
ssh  user@IP地址 #若客户机登录用户与主机用户名相同,可省去user@)
ssh  user@IP地址  command
 -p  22 #端口选项 
scp  命令
scp  源文件  目标位置 #IP:文件的绝对路径
 -r #递归复制
用户名这部分影响了文件的权限
sftp命令
sftp   user@IP地址
#是个交互式的环境,使用put 、get进行操作。

三、构建密钥对验证的SSH体系
密钥对验证整过细节包含四步:
a.首先要在SSH客户端以root用户身份创建密钥对
b.客户端将创建的公钥文件上传至SSH服务端
c.服务端将公钥信息导入用户root的公钥数据库文件
d.客户端以root用户身份连接服务器端root用户测试
1.在客户端创建密钥对,使用ssh-keygen命令,通过RSA、DSA、ECDSA等加密算法实现,通过-t选项指定。
ssh-keygen  -t   rsa
在主配置文件指定的位置会发现公钥id_rsa.pub和私钥id_rsa
2.将公钥使用scp命令传给客户端。
scp  /root/.ssh/id_rsa.pub   目标主机IP:/root
3.目标主机创建和当前主机权限相同的.ssh文件夹。并且将公钥内容导入到.ssh文件夹内的authorized_keys中。
mkdir .ssh
chmod 700 .ssh
cat /root/id-rsa.pub  >> /root/.ssh/authorized_keys
4.连接测试。
#可以用ssh-copy-id   命令直接实现公钥传输。
ssh-cpy-id   -i   /root/.ssh/id_pub  root@目标IP
#-i  指定公钥可以省略
 
四、TCP Wrappers
1,TCP Wrappers保护原理
TCP Wrappers将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全监测的过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
2、保护机制的实现方式
方式1:通过tcpd主程序对其他服务程序进行包装
方式2:由其他服务程序调用libwrap.so.*链接库
3、TCP Wrappers保护的条件
(1)必须是采用TCP协议的服务
(2)函数库中必须包含libwrap.so.0(共享连接库)、大多数服务通过这种方式,可以用ldd命令查看
#ldd  /sbin/ifconfig    查看ifconfig命令调用的库文件
4、访问控制策略的配置文件
/etc/hosts.allow #允许
/etc/hosts.deny  #拒绝
访问控制策略处理流程图

 

/etc/hosts.allow文件的优先级更高,若同一IP地址即出现在hosts.allow中,也存在与hosts.deny中,则该IP地址的访问请求将被接受。

文件格式

 

 


配置示例
实验要求:仅允许IP地址为192.168.200.100-192.168.200.199的主机访问sshd服务,禁止其他所有地址的访问。
vim       /etc/hosts.allow
sshd:192.168.200.1??
vim   /etc/hosts.deny
sshd:ALL
#因为/etc/hosts.allow的文件优先级较高所以在其中写上允许的IP并拒绝掉其他所有IP
 
 
#小知识
对访问的IP进行过滤
awk  '/Failed/{print  $(NF-3)}'   /var/log/secure  |sort  -nr  | uniq  -c  |   head
 

推荐阅读