openssh
type
status
date
slug
summary
tags
category
icon
password
openssh
- ssh: secure shell, protocol, 22/tcp, 安全的远程登录
- 具体的软件实现: OpenSSH: ssh协议的开源实现,CentOS默认安装 dropbear:另一个开源实现
- SSH协议版本 v1: 基于CRC-32做MAC,不安全;man-in-middle v2:双方主机协议选择安全的MAC方式 基于DH算法做密钥交换,基于RSA或DSA实现身份认证
- 两种方式的用户登录认证: 基于password 基于key(对称密钥)
Openssh软件组成
- OpenSSH介绍
- 相关包 openssh、openssh-clients、openssh-server
- 工具 基于C/S结构 Client: ssh, scp, sftp,slogin Windows客户端 xshell, putty, securecrt, sshsecureshellclient Server: sshd
ssh客户端
客户端组件:ssh
配置文件:/etc/ssh/ssh\_config
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh\_host\*key.pub(CentOS7默认是ssh\_host\_ecdsa\_key.pub)文件中的公钥到客户机的~./ssh/know\_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
ssh加密通讯

1、C把数据发给S并用S的公钥加密,S端收到数据用私钥解密
2、S把数据发给C并用C的公钥加密,C端收到数据用私钥解密
公钥交换

ssh服务登录验证
- ssh服务登录验证方式: 用户/口令 基于密钥
- 基于用户和口令登录验证 1、客户端发起ssh请求,服务器会把自己的公钥发送给用户 2、用户会根据服务器发来的公钥对密码进行加密 3、加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于用户名口令登录验证

ssh服务基于密钥登录验证
- 基于密钥的登录方式 1、首先在客户端生成一对密钥(ssh-keygen) 2、并将客户端的公钥ssh-copy-id 拷贝到服务端 3、当客户端再次发送一个连接请求,包括ip、用户名 4、服务端得到客户端的请求后,会到authorized\_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串 5、服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端 6、得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端 7、服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
基于密钥的登录方式

基于key认证实现
基于密钥的认证:
(1) 在客户端生成密钥对
(2) 把公钥文件传输至远程服务器对应用户的家目录
(3) 测试
(4) 在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized\_keys中,注意权限必须为600,在需登录的ssh主机上执行:
(5)重设私钥口令:
(6)验证代理(authentication agent)保密解密后的密钥
(7)钥匙通过命令添加给代理
示例
2台机器使用同一个公钥和私钥会有什么情况
关于XSERVER
如果要本机显示xclock(xclient)程序,需要本机安装xserver
xserver xclient 软件 X协议 xserver调用显卡驱动
简单理解 xclock 指定 xserver 将图形打印出来
使用xshell访问xclock图形程序
A=WINDOWS B=CENTOS
1、A远程访问B
2、B上面运行xclock(xclinet)
3、B(xclient)回报(X协议)给 A(xserver)
4、A收到回报转发给xserver
5、xserver调用显卡等功功能,显示xclock(xclient)
scp命令
rsync命令
- 基于ssh和rsh服务实现高效率的远程系统之间复制文件
- 使用安全的shell连接做为传输方式
sftp命令
- 交互式文件传输工具
- 用法和传统的ftp工具相似
- 利用ssh服务实现安全的文件上传和下载
- 使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
pssh工具
pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制此工具了解下,ansible可以代替,还更简单
pssh示例
通过pssh批量关闭seLinux
批量发送指令
当不支持ssh的key认证时,通过 -A选项,使用密码认证批量执行指令
将标准错误和标准正确重定向都保存至/app目录下
pscp.pssh命令
pscp.pssh功能是将本地文件批量复制到远程主机
将本地curl.sh 复制到/app/目录
将本地多个文件批量复制到/app/目录
将本地目录批量复制到/app/目录
pslurp命令
pslurp功能是将远程主机的文件批量复制到本地
批量下载目标服务器的passwd文件至/app下,并更名为user
SSH端口转发(重要,很实用,比如SSR,科学上网)
- SSH端口转发 SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
- SSH 端口转发能够提供两大功能: 加密 SSH Client 端至 SSH Server 端之间的通讯数据突破防火墙的限制完成一些之前无法建立的 TCP 连接
本地转发
远程转发
- 动态端口转发:
- 当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问
X 协议转发
- 所有图形化应用程序都是X客户程序 能够通过tcp/ip连接远程X服务器 数据没有加密机,但是它通过ssh连接隧道安全进行
示例一:使用本地转发

ethernet\[ip{tcp(ssh(X))}\] #X代表任何一个协议
1、本地转发,指定一个本地没有被使用的端口
client >> data >> localhost:port >>>ssh(data)
server >> ssh(data)>> data>> telnet client
telnet client > telnet server
192.168.10.4 telnet-server
192.168.10.2 clinet
优势:支持各种应用
劣势:一般企业内部是不允许从外网访问进来的,防火墙阻止了,但从内网出去是可以
示例二:开启远程转发

data > 9527 > ssh client > telnet client > telnet server
192.168.10.3 内网开启转发
192.168.10.2 client
示例三:
关于示例二,只能有一台主机可以访问,若想实现多台主机访问,参考示例三

跳板机 网关
client > jumpserver >> sshclient >> ssh server >> httpd
192.168.10.5
192.168.10.3
192.168.10.2
示例四,动态端口转发,科学上网

192.168.10.4
192.168.10.2 client
示例五
关于示例四有点麻烦,还要开个虚拟机,优化下,将SSH服务端和客户放在一起

192.168.10.5 server/client
192.168.10.2 client
ssh服务器
服务器端:sshd, 配置文件: /etc/ssh/sshd\_config
- 限制可登录用户的办法: AllowUsers user1 user2 user3 DenyUsers AllowGroups DenyGroups tail /var/log/secure 查看日志
ssh服务的最佳实践
- 建议使用非默认端口
- 禁止使用protocol version 1
- 限制可登录用户
- 设定空闲会话超时时长
- 利用防火墙设置ssh访问策略
- 仅监听特定的IP地址
- 基于口令认证时,使用强密码策略
- 使用基于密钥的认证
- 禁止使用空密码
- 禁止root用户直接登录
- 限制ssh的访问频度和并发在线数
- 经常分析日志
编译安装dropbear示例
ssh协议的另一个实现:dropbear
轻量化ssh一款开源软件 https://matt.ucc.asn.au/dropbear/dropbear.html
小结
1、SSH转发端口很有趣,也很实用,相当于建立一个隧道,进行数据传输
2、批量实现key验证
3、提升SSH速度
4、SSH安全相关的参数请参考这个ssh服务的最佳实践
5、生成随机密码
6、开启SSH转发功能
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
上一篇
Jenkins
下一篇
sonarqube
Loading...
keepalived