• SSH基本概念及常见问题解决


    一、背景

    SSH在进行远程连接通信是好工具,应用场景也很广泛。最近,在使用SSH过程中由于凭借感觉去使用,遇到一些问题,在此记录总结一下。

    二、SSH的基本概念

    基本背景和特性

    百度百科上,关于SSH的介绍较为详细,主要可以去关注以下几点:

    1. SSH的基础背景,解决何种问题

    SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

    传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据

    1. SSH的结构组成、如何解决该问题
    • 建立与TCP/IP之上的应用层协议
    • 通过秘钥、用户密码进行客户端验证(重点关注理解一下基于秘钥的验证方式)
    • 传输层、用户认证协议、连接协议

    传输层协议 [SSH-TRANS]
    提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

    用户认证协议 [SSH-USERAUTH]
    用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。

    连接协议 [SSH-CONNECT]
    将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

    1. 安全技巧,简单应用

    如果你还在通过密码方式登录SSH,那么你或许应该试试SSH Keys,首先使用OpenSSH为自己生成一对密钥:$ ssh-keygen

    跟随指示,完成之后,你应该可以在你的.ssh目录下看到两个文件,id_rsa就是你的私钥,而id_ras.pub则是你的公钥,现 在你需要将你的公钥拷贝到服务器上,如果你的系统有ssh-copy-id命令,拷贝会很简单:$ ssh-copy-id

    否则,你需要手动将你的公钥拷贝的服务器上的~/.ssh/authorized_keys文件中:
    $ < ~/.ssh/id_rsa.pub ssh ‘mkdir -p .ssh; cat >> .ssh/authorized_keys; chmod go-w .ssh .ssh/authorized_keys’

    更多了解

    GitHub上,可以通过源码去进一步探索OpenSSH的实现。

    三、简单应用

    关键配置文件

    由于SSH设计分为ssh客户端和sshd服务端,因此对应的配置文件有:
    /etc/ssh/ssh_config和/etc/sshd_config
    具体的参数解释,如下表(来源于Linux就该这么学),更加详细的可参考该篇文章
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    基于用户密码登录

    • 首先,需要检查是否安装OpenSSH(ssh -V),若未安装则需要进行安装(yum install -y openssh)
    • 进行/etc/ssh/sshd_config配置,凭借英语基础就可以配置,将运行用户密码登录改为yes;若root登录需要设置 PermitRootLoing,否则报错权限拒绝
    • 启动 ssh service start ssh、/etc/init.d/sshd start;
    • ssh localhost进行测试、远程进行连接测试

    基于密钥的登录

    • 在客户端生成秘钥 ssh-keygen
    • 复制秘钥(公钥)至服务端 ssh-copy-id remoteIP ,或手动复制cat ~/.ssh/id_rsa.pub >> .ssh/authorized_keys
    • 重启服务,service ssh restart

    一些常见问题

    • Permission denied(publickey,…password)
      在这里插入图片描述
      解决办法:公钥复制问题,动复制cat ~/.ssh/id_rsa.pub >> .ssh/authorized_keys (注意针对何种用户,放在该用户/.ssh下)
      在这里插入图片描述
    • ssh远程登录报错Warning: Permanently added ‘111.124.131.312‘ (ECDSA) to the list of known hosts.
      在这里插入图片描述
    • wsl 的 ssh server 无法启动 (ssh localhost 时报错ssh: connect to host localhost port 22: Connection refused)

    重新安装!(服务拒绝,说明该端口进程大概率没有启动,可通过 ss 命令查看端口开启情况,也可以查看服务是否安装成功)
    在这里插入图片描述

    • 问题root@localhost’s password:localhost:permission denied,please try again
      1.安装 open ssh:sudo apt-get install openssh-server
      2.修改root密码:#sudo passwd root
      3.辑配置文件,允许以 root 用户通过 ssh 登录:sudo vi /etc/ssh/sshd_config
      找到:PermitRootLogin prohibit-password禁用
      添加:PermitRootLogin yes
      4.sudo service ssh restart
  • 相关阅读:
    Bitget Wallet:使用 Base 链购买 ETH 的简明教程
    Linux C 网络基础
    林沛满---一个面试建议
    IDEA运行项目报错:Command line is too long的解决办法
    3. 【containerd】image 什么时候会被垃圾回收
    Mysql——》计算日期差
    网页设计学习记录-常用圆角按钮css
    品牌夜间低价数据如何监测
    Flink的状态一致性
    Ngram全文检索,模糊查询解决方案
  • 原文地址:https://blog.csdn.net/qq_44654974/article/details/127460843