SSH远程管理

1.SSH服务

1.1什么是SSH服务

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。

优点:

  • 数据传输是加密的,可以防止信息泄漏
  • 数据传输是压缩的,可以提高传输速度

1.2常见的ssh协议

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

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

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

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

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

1.3 SSH原理

  • 客户端发起链接请求
  • 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
  • 客户端生成密钥对
  • 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
  • 客户端发送加密值到服务端,服务端用私钥解密,得到Res
  • 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

1.4用户登录

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

ssh命令 -p 端口号 当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。

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

-l :-l 选项,指定登录名称

css 复制代码
[root@ky15 ~]#ssh -l root 192.168.223.100
root@192.168.223.100's password: 
Last login: Tue Sep 28 22:25:40 2023 from 192.168.223.100

方法三: ssh -t 192.168.91.101 ssh -t 192.168.91.102 ssh 192.168.91.103 方便跳板连接

1.5服务端配置

1.5.1 端口号修改

csharp 复制代码
[root@ky31 ~]# vim /etc/ssh/sshd_config 
17  Port    22   

修改完之后要重启服务

1.5.2监听特定的ip地址

ListenAddress ip

监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。

1.5.3 设置最大失败尝试登录次数为6

1.5.4 PermitEmptyPasswords

密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。

1.5.4 禁止root用户登录

perl 复制代码
[root@localhost ssh]#vim  /etc/ssh/sshd_config
#开启38 行 并改为 no,默认注释并写的yes
38 PermitRootLogin no
#注意虽然阻止了root 但是普通用户可以使用su

1.5.5 白名单黑名单列表

perl 复制代码
[root@localhost ssh]#vim /etc/ssh/sshd_config
#手动添加
白名单
AllowUsers lzq@192.168.223.100    lisi     
#允许所有有的主机访问我的lisi用户
#只允许 zhangsan 从192.168.223.100上访问



黑名单:
DenyUsers  liwu
#不允许liwu的所有主机访问我

1.5.6其他的一些常用配置项

yaml 复制代码
LoginGraceTime 2m
#用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒

PermitRootLogin yes 
#默认 ubuntu不允许root远程ssh登录

StrictModes yes   
#检查.ssh/文件的所有者,权限等

MaxAuthTries 
#用来设置最大失败尝试登陆次数为6


MaxSessions  10         
#同一个连接最大会话
PubkeyAuthentication yes     
#基于key验证

PermitEmptyPasswords no      
#密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。


PasswordAuthentication yes   
#基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 
#单位:秒
ClientAliveCountMax 3 
#默认3
UseDNS yes 
#提高速度可改为no   内网改为no  禁用反向解析
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups    #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单  黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2

ssh服务的最佳实践

  1. 建议使用非默认端口 22
  2. 禁止使用protocol version 1
  3. 限制可登录用户 白名单
  4. 设定空闲会话超时时长
  5. 利用防火墙设置ssh访问策略
  6. 仅监听特定的IP地址 公网 内网
  7. 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
  8. 使用基于密钥的认证
  9. 禁止使用空密码
  10. 禁止root用户直接登录
  11. 限制ssh的访问频度和并发在线数
  12. 经常分析日志 分离

2.怎么样实现免密登录

2.1操作流程

1.先生成密钥文件

2.不需要改文件位置的话直接三次回车,加密文件就生成了

3.cd过去查看文件是否被建立

4.将公钥文件发送给你想直接免密登录的主机

5.输入密码验证,即可完成

6.之后再连就不需要密码了

相关推荐
IT、木易1 小时前
ES6 新特性,优势和用法?
前端·ecmascript·es6
计算机软件程序设计1 小时前
vue和微信小程序处理markdown格式数据
前端·vue.js·微信小程序
指尖时光.1 小时前
【前端进阶】01 重识HTML,掌握页面基本结构和加载过程
前端·html
前端御书房1 小时前
Pinia 3.0 正式发布:全面拥抱 Vue 3 生态,升级指南与实战教程
前端·javascript·vue.js
NoneCoder2 小时前
JavaScript系列(84)--前端工程化概述
前端·javascript·状态模式
晚安7202 小时前
idea添加web工程
java·前端·intellij-idea
零凌林3 小时前
vue3中解决组件间 css 层级问题最佳实践(Teleport的使用)
前端·css·vue.js·新特性·vue3.0·teleport
糟糕好吃3 小时前
用二进制思维重构前端权限系统
前端
拉不动的猪3 小时前
刷刷题17(webpack)
前端·javascript·面试
烂蜻蜓4 小时前
深入理解 Uniapp 中的 px 与 rpx
前端·css·vue.js·uni-app·html