SSH服务

2020-03-11  本文已影响0人  Simon_Ye

SSH

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

具体的软件实现

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

SSH协议版本

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

  1. 基于password
  2. 基于key

Openssh软件组成

相关包

工具

基于C/S结构


ssh客户端

ssh服务登录验证

基于用户和口令登录验证

  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

  1. ~]# ssh -L 9527:telnetsrv:23 -N sshsrv
  2. telnet 127.0.0.1 9527
    当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到 telnetsrv:23
远程转发:

ssh -R sshserverport:remotehost:remotehostport sshserver

动态端口转发:
X协议转发

ssh服务器

服务器端:

ssh服务的最佳实践

上一篇 下一篇

猜你喜欢

热点阅读