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

Posted adventure.Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于SSH基本概念及常见问题解决的主要内容,如果未能解决你的问题,请参考以下文章

锁的概念及synchronized使用原理解析

大数据Flink学习系列文章(快学)---02 Flink基本概念及架构

堆的基本概念及堆排序

linux信号基本概念及如何产生信号

排序的基本概念及常见排序算法

Flume入门 | 基本概念及架构说明