远程访问及控制SSH服务
远程访问及控制SSH服务
SSH服务
什么是SSH服务器
ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用 ssh 协议可以有效防止远程管理过程中的信息泄露问题。 ssh可用于大多数UNIX和类UNIX操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
- 客户端配置文件:/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配置
实验:批量创建多台服务器文件
示例:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?