SSH基本概念及常见问题解决
Posted adventure.Li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH基本概念及常见问题解决相关的知识,希望对你有一定的参考价值。
一、背景
SSH在进行远程连接通信是好工具,应用场景也很广泛。最近,在使用SSH过程中由于凭借感觉去使用,遇到一些问题,在此记录总结一下。
二、SSH的基本概念
基本背景和特性
在百度百科上,关于SSH的介绍较为详细,主要可以去关注以下几点:
- SSH的基础背景,解决何种问题
SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据
- 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 连接。
- 安全技巧,简单应用
如果你还在通过密码方式登录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基本概念及常见问题解决的主要内容,如果未能解决你的问题,请参考以下文章