SSH服务

作者: Simon_Ye | 来源:发表于2020-03-11 13:01 被阅读0次

SSH

secure shell,protocol,22/tcp,安全的远程登录

具体的软件实现

OpenSSH:ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现

SSH协议版本

  • v1:基于CRC-32做MAC,不安全;man-in-middle
  • v2:双方主机协议选择安全的MAC方式
     基于DH算法做密钥交换,基于RSA或DSA实现身份认证

两种方式的用户登录认证:

  1. 基于password
  2. 基于key

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
     Host PATTERN
      StrictHostKeyChecking no 首次登录不显示检测提示
  • 格式:
    ssh [user@]host [COMMAND]
    ssh [-l user] host [COMMAND]
    -p port:远程服务器监听的端口
    -b:指定连接的源IP
    -v:调试模式
    -C:压缩方式
    -X:支持x11转发
    -Y:支持信任x11转发
      ForwardX11Trusted yes
    -t:强制伪tty分配
      ssh -t remoteserver1 ssh remoteserver2
  • 允许实现对远程系统经验证地加密安全访问
  • 当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS 7 默认是 ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~/.ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接

ssh服务登录验证

  • ssh服务登录验证方式:
    • 用户/口令
    • 基于密钥 key

基于用户和口令登录验证

  1. 客户端发起 ssh 请求,服务器会把自己的公钥发送给用户
  2. 用户会根据服务器发来的公钥对密码进行加密
  3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

基于密钥 key 的登录方式

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

基于 key 认证步骤:

  1. 在客户端生成密钥对
    ssh-keygen -t rsa [-P ""] [-f "~/.ssh/id_rsa"]
  2. 把公钥文件传输至远程服务器对应用户的家目录
    ssh-copy-id [-i [identity_file]] [user@]host
  3. 测试
  4. 在 SecureCRT 或 Xshell 实现基于 key 验证
    • 在 SecureCRT 工具 --> 创建公钥 --> 生成 Identity.pub 文件
      转化为 openssh 兼容格式(适合 SecureCRT,Xshell 不需要转化格式),并复制到需登录主机上相应文件 authorized_keys 中,注意权限必须为600,在需登录的 ssh 主机上执行:
      ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
  5. 重设私钥口令
    ssh-keygen -p
  6. 验证代理(authentication agent)保密解密后的密钥
    • 这样口令就只需要输入一次
    • 在GNOME中,代理被自动提供给root用户
    • 否则运行 ssh-agent bash
  7. 钥匙通过命令添加给代理
    ssh-add

SSH端口转发

SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯

SSH 端口转发能够提供两大功能:
  1. 加密 SSH Client 端至 SSH Server 端之间的通讯数据
  2. 突破防火墙的限制完成一些之前无法建立的 TCP 连接
本地转发:

ssh -L localport:remotehost:remotehostport sshserver

  • 选项:
    -f:后台启用
    -N:不打开远程shell,处于等待状态
    -g:启用网关功能
  • 示例:
  1. ~]# ssh -L 9527:telnetsrv:23 -N sshsrv
  2. telnet 127.0.0.1 9527
    当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到 telnetsrv:23
  • 流程:
    data <- -> localhost:9527 <- -> localhost:XXXXX <- -> sshsrv:22 <- -> sshsrv:YYYYY <- -> telnetsrv:23
远程转发:

ssh -R sshserverport:remotehost:remotehostport sshserver

  • 示例:
    ssh -R 9527:telnetsrv:23 -N sshsrv
    让 sshsrv 侦听9527端口的访问,如果有访问,就加密后通过 ssh 服务转发请求到本机 ssh 客户端,再由本机解密后转发到 telnetsrv:23
  • 流程:
    Data <- -> sshsrv:9527 <- -> sshsrv:22 <- -> localhost:XXXXX <- -> localhost:YYYYY <- -> telnetsrv:23
动态端口转发:
  • 当用 firefox 访问 internet 时,本机的1080端口做为代理服务器,firefox的访问请求被转发到 sshserver上,由 sshserver 替之访问 internet
    ssh -D 1080 root@sshserver
    在本机 firefox 设置代理 socket proxy:127.0.0.1:1080
    curl --socks5 127.0.0.1:1080 http://www.qq.com
X协议转发
  • 所有图形化应用程序都是X客户程序
    • 能够通过 tcp/ip 连接远程x服务器
    • 数据没有加密机,但是它通过ssh连接隧道安全进行
  • ssh -X user@remotehost gedit
    remotehost主机上的gedit工具,将会显示在本机的X服务器上传输的数据将通过ssh连接加密

ssh服务器

服务器端:

  • sshd,配置文件:/etc/ssh/sshd_config
  • 常用参数:
    1. Port:端口
    2. ListenAddress ip:绑定监听地址
    3. LoginGraceTime 2m
    4. PermitRootLogin yes
    5. StrictModes yes:检查.ssh/文件的所有者,权限等
    6. MaxAuthTries 6
    7. MaxSessions 10:同一个连接最大会话
    8. PubkeyAuthentication yes
    9. PermitEmptyPasswords no
    10. PasswordAuthentication yes
    11. GatewayPorts no
    12. ClientAliveInterval:单位(秒)
    13. ClientAliveCountMax:默认3
    14. UseDNS yes
    15. GSSAPIAuthentication yes:提高速度可改为no
    16. MaxStartups:未认证连接最大值,默认值10
    17. Banner /path/file:提示信息,写入文件里
    18. 限制可登录用户的办法(黑名单优先级高于白名单):
       AllowUsers user1 user2 user3
       DenyUsers
       AllowGroups
       DenyGroups

ssh服务的最佳实践

  • 建议使用非默认端口
  • 禁止使用 protocol version 1
  • 限制可登录用户
  • 设定空闲会话超时时长
  • 利用防火墙设置ssh访问策略
  • 仅监听特定的IP地址
  • 基于口令认证时,使用强密码策略
    tr -dc 'A-Za-z0-9_' < /dev/urandom | head -c 30 | xargs
  • 使用基于密钥的认证
  • 禁止使用空密码
  • 禁止root用户直接登录
  • 限制ssh的访问频度和并发在线数
  • 经常分析日志(lastb命令)

相关文章

  • Scientific Linux 7.5 启动SSH

    1.安装SSH服务 2.查看SSH服务 3.启动SSH服务

  • Ubuntu开启ssh服务

    检查ssh是否已经开启 安装ssh服务 修改ssh配置文件 启动ssh服务

  • 第7章 网络服务及安全

    第7章 网络服务及安全 SSH服务 SSH协议简介 Ubuntu安装SSH SSH服务配置 使用putty登陆SS...

  • linux学习——远程服务器管理工具SSH

    2018-08-27 SSH是什么 服务器安装SSH服务 客户端安装SSH客户端 SSH客户端连接服务器 SSH ...

  • SSH服务的搭建

    管理服务 1、什么是SSH? SSH基础服务,SSH是远程连接Linux,管理Linux的服务。Secure Sh...

  • Linux安装ssh

    查看ssh服务状态: sudo service ssh status1.没有安装ssh服务没有安装ssh2.安装了...

  • SSH基本使用

    目标 了解SSH是什么 服务端安装SSH 客户端安装SSH ssh连接远程服务 ssh config配置讲解(多服...

  • 远程登录linux

    远程登录Linux需要打开ssh服务 终端利用ssh登录远程服务器 安装ssh服务: yum install ss...

  • ssh 密钥方式远程链接linux

    查看 ssh 运行服务 查看 ssh 服务监听的端口 默认监听的 端口 是 22 端口 修改 ssh 服务端口(c...

  • 8月21日 批量管理

    远程管理服务配置文件 etc/ssh/sshd_config ssh服务端配置文件 /etc/ssh/ssh_co...

网友评论

      本文标题:SSH服务

      本文链接:https://www.haomeiwen.com/subject/rwrgdhtx.html