Linux点点滴滴(一):SSH协议

Linux学习的点点滴滴(一)

一、SSH协议介绍

SSH全称是Secure Shell,是基于网络中应用层的协议,为远程登录会话和其他网络服务提供安全性的协议。SSH使用最多的是远程登录和传输文件,实现此功能的传统协议都不安全(ftp,telnet等),因为它们使用明文传输数据。而SSH在传输过程中的数据是加密的,安全性更高。基于SSH协议的文件传输协议SFTP是安全的,我在后面的学习中也会介绍。

二、工作原理

SSH协议是基于非对称加密方法的,服务器和客户端都会生成自己的公钥和私钥。

  1. 服务器建立公钥。若远程服务器是新系统,会在/etc/ssh目录下生成一个名为ssh_host_ecdsa_key.pub的公钥,同时生成一个名为ssh_host_ecdsa_key的私钥,这一对就是远程服务器的公钥与私钥。之后每回启动sshd服务的时候,系统会自动在此路径下查找公钥;
  2. 客户端请求连接。linux或者mac系统可以直接通过自带的shell连接,命令为 ssh user@host ,如果客户端和服务器是相同的用户,则可以省去user,直接使用ssh host;
  3. 服务器发送公钥给客户端。服务器接到请求后,把公钥传给客户端使用;
  4. 客户端记录服务器公钥并计算自己的公私钥。客户端将服务器传来的公钥记录在~/.ssh/known_hosts中,若是已经记录有该服务器公钥,则比对是否一致,一致后就计算客户端自己的公私钥;
  5. 客户端发送自己的公钥给服务器。客户端将自己的公钥发送给服务器,这样服务器端就有客户端公钥+服务器自己私钥,客户端就有服务器公钥+客户端自己私钥,组成了非对称加密系统;
  6. 开始双向加解密。服务器发送数据:用客户端公钥加密,客户端收到数据后用自己私钥解密。客户端发送数据:用服务器公钥加密,服务器收到数据后用自己私钥解密

三、工作过程

  1. 版本号协商阶段,SSH目前包括 SSH1和SSH2两个版本, 双方通过版本协商确定使用的版本
  2. 密钥和算法协商阶段,SSH支持多种加密算法, 双方根据本端和对端支持的算法,协商出最终使用的算法
  3. 认证阶段,SSH客户端向服务器端发起认证请求, 服务器端对客户端进行认证
  4. 会话请求阶段, 认证通过后,客户端向服务器端发送会话请求
  5. 交互会话阶段 ,会话请求通过后,服务器端和客户端进行信息的交互

四、认证方式

认证方式主要有两种:密码认证和公钥认证。
密码认证:输入账号密码进行认证。
公钥认证:需要客户端生成一对公私钥,使用ssh-keygen生成,保存在~/.ssh路径下,然后使用指令ssh-copy-id user@host传到服务器端,以后再登录认证的时候,客户端自动发送公钥给服务器,服务对比一致则通过认证,不要繁琐地输入密码了。

五、具体实现

1. SSH连接成功

在cmd中输入命令:ssh username@ip:port,根据提示输入密码即可,第一次登录会有验证,输入Yes,再输入密码即可(输入密码不可见)。
SSH连接成功

2. 安装SSH

有的电脑没有自带的OpenSSH Server,因此要自己下载安装并且配置。
先在终端中输入ssh,看是否已经安装,如下图
电脑已安装SSH
那么就可以直接连接了。
如果没有安装,cmd提示未知命令,我们可以先在设置中的应用,点击蓝色小字管理可选功能,点击添加功能设置 应用管理可选功能
然后安装OpenSSH Server.一般的默认会安装在电脑的C:\Windows\System32中,然后添加环境变量:`C:\Windows\System32\OpenSSH``,然后在cmd中启动ssh即可。
若电脑中无法根据上述安装OpenSSH,那么从网络中下载一个OpenSSH的包即可。
如果实在不想这么麻烦,从网络上下载有关SSH的软件也是一种不错的方案,如Xshell(Xshell Download) Termius(Termius Download)等。

Termius长这样:
Termius
Xshell长这样:
在这里插入图片描述
虽然Termius好看,但是只有SSH功能是免费的,例如SFTP等都是要收费的,Xshell只有SSH连接这一个功能,如果要用SFTP的话,还要下载XFTP这个软件。

3. 通过虚拟机连接SSH

(1)安装虚拟机就不说了,我用的是Ubuntu

安装完成后如图:
虚拟机安装完成

(2)设置虚拟机网络

先设置虚拟机的网络:
在这里插入图片描述
端口默认为22,就不用改了。
Port:22
然后在虚拟机中打开终端(快捷键为Ctrl+Alt+T),一般刚安装的都要更新apt工具包,输sudo apt-get update,然后输入密码(使用root账户的权限)
apt install
apt-update

(3)安装和设置SSH服务

然后在终端中输入sudo apt-get install openssh-server,然后输入y安装完成。
继续在终端输入service ssh status,观察ssh是否启动,如下状态说明已经启动:
SSH service start
或者在终端输入sudo ps -e | grep ssh.如果没有启动,输入sudo service ssh start即可启动ssh服务。

(4)修改SSH设置

接着我们就要修改SSH的配置,ssh的配置文件是/etc/ssh/sshd_config,默认放在/etc/ssh文件夹中。在Linux中是没有像Windows中有C盘D盘之分的,只有一个根目录//etc文件夹就是在根目录中的其中一个系统文件夹。
该文件的权限属于root,我们只有读文件的权限,没有修改的权限,因此要用chmod命令修改该文件权限:chmod 777 /etc/ssh/sshd_config,该命令表示将该文件的权限修改为该用户可读可写可执行,组内用户可读可写可执行,其他用户可读可写可执行。chmod 777表示文件的r,w,x(读、写、执行权限),如果给予全部三个权限,这三个值便全是1,那么111用十进制表示就是7,任何人可对其读写和执行,777就是一个文件的最高权限。对于Linux的文件系统,我以后会慢慢介绍。
然后打开该文件(暂时先不用vim):sudo gedit /etc/ssh/sshd_config,把配置文件中的找到#PasswordAuthentication no的注释#去掉,并且将NO修改为YES,将#PermitRootLogin prohibit-password修改为 PermitRootLogin yes保存,修改成功。即修改为如下状态:
sshd_config
sshd_config
保存后退出,输入service ssh restart重启服务,这样就设置成功了。

(5)设置SSH连接

连接总得有IP吧,在Linux终端输入ifconfig查看IP,注意和Windows中的ipconfig不一样,如果提示没有该命令的话,按照提示安装net-tools包即可。
用虚拟机的话,所有的IP都是127.0.0.1,表示本机环回地址,然后在Xshell中连接即可:
在这里插入图片描述
用cmd的话,就是ssh [email protected]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同理,连接完成后的Xshell如下:
在这里插入图片描述

发布了40 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42650988/article/details/103530553