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加密通讯

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

ssh服务登录验证

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

基于用户名口令登录验证

notion image

ssh服务基于密钥登录验证

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

基于密钥的登录方式

notion image

基于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连接隧道安全进行

示例一:使用本地转发

notion image
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
优势:支持各种应用 劣势:一般企业内部是不允许从外网访问进来的,防火墙阻止了,但从内网出去是可以

示例二:开启远程转发

notion image
data > 9527 > ssh client > telnet client > telnet server 192.168.10.3 内网开启转发
192.168.10.2 client

示例三:

关于示例二,只能有一台主机可以访问,若想实现多台主机访问,参考示例三
notion image
跳板机 网关 client > jumpserver >> sshclient >> ssh server >> httpd
192.168.10.5
192.168.10.3
192.168.10.2

示例四,动态端口转发,科学上网

notion image
192.168.10.4
192.168.10.2 client

示例五

关于示例四有点麻烦,还要开个虚拟机,优化下,将SSH服务端和客户放在一起
notion image
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...