SSH是Linux中的基础服务,作为IT从业者,基本上每天都要SSH连接到服务器中,从事各种各样的工作。作为这样基础的不能再基础的服务,一旦出现问题,影响也是巨大的,连不上就无法对服务器进行配置和更改,所有的事情也就无从谈起。
在这篇文章中,我们会对SSH服务进行介绍,并对一些常见的问题进行分析,进而提供相应的解决方法。话不多说,我们进入主题。
一、SSH服务简介
SSH采用的是C/S架构,SSH server端一般运行在服务器中,这里的服务器可以是物理服务器,而现在随着云计算的推广,更大的可能性是云主机,比如AWS的EC2实例,阿里云的ECS实例等。SSH client端则千差万别,Linux中是ssh命令,一般是OpenSSH软件包的一部分;Windows中比较常见的是SecureCRT,X-Shell,Moba-Xterm等。
接下来,我们以Linux Mint作为SSH client端,以AWS EC2为SSH server端进行演示和分析。
我们首先来分析一个正常的SSH连接是如何进行的,在这里我们通过ssh命令的-vvv选项,来看一下SSH连接背后发生了什么。这里为了减少不必要的影响,略去了测试用的对端IP地址,Linux Mint的ssh配置文件默认指定了连接用户为ec2-user,指定了本地的私钥文件位置为/home/user/.ssh/user.pem。
################################################
user@PC:~$ ssh IP -vvv
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
#本机的ssh客户端版本信息
.....
.....
debug1: Connecting to IP [IP] port 22.
debug1: Connection established.
#与对端TCP 22端口完成建联过程
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/user.pem type -1
#本地的key文件
.....
.....
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: match: OpenSSH_7.4 pat OpenSSH* compat 0x04000000
#对端ssh服务器版本信息
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to IP:22 as 'ec2-user'
#本地配置文件中指定的用户信息
.....
.....
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellm