SSH原理 and SSH远程登录

SSH

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。

SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。

SSH的安全机制

SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。

传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。

但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:

第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。

第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。

SSH的安装

SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。

dpkg -l | grep ssh
image

如果只是想远程登陆别的机器只需要安装客户端(Ubuntu默认安装了客户端),如果要开放本机的SSH服务就需要安装服务器。

sudo apt-get install openssh-client sudo apt-get install openssh-server
 

启动服务器的SSH服务

首先确认ssh-server是否已经启动了

ps -e | grep ssh
image

如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:

sudo /etc/init.d/ssh start 

停止和重启ssh服务的命令如下:

sudo /etc/init.d/ssh stop  #server停止ssh服务 sudo /etc/init.d/ssh restart  #server重启ssh服务

接下来就可以进行使用客户机远程登录服务器了~

SSH两种级别的远程登录

一、口令登录

口令登录非常简单,只需要一条命令,命令格式为: **ssh 客户端用户名@服务器ip地址 **eg:

ssh [email protected]

如果需要调用图形界面程序可以使用 -X 选项

ssh -X [email protected]

如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。

ssh 192.168.0.1

还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用** -p 选项来修改端口号**,比如连接到服务器的1234端口:

ssh -p 1234 [email protected]

客户机必须要知道服务器的ip地址。可以在服务器端电脑上利用** ifconfig** 命令查看该机的ip地址:

image

如果是第一次登录远程主机,系统会给出下面提示:

image

意思是,该远程主机的真实性无法确定,其公钥指纹为 SHA256:s8pZiuKQr7k7f+57j22lk/IdWC8143VQKR+EabeP5,确定想要继续连接吗?

输入yes即可。这时系统会提示远程主机被添加到已知主机列表。

image

然后会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。

image

我们可以通过** Ctrl+D** 或者 exit 命令退出远程登录

二、公钥登录

每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。

1、在本机生成密钥对

使用ssh-keygen命令生成密钥对:

ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法
然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。

2、将公钥复制到远程主机中

使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中

ssh-copy-id [email protected]
经过以上两个步骤,以后再登录这个远程主机就不用再输入密码了。

三、Putty工具远程登录

1.操作场景:本文以 PuTTY 软件为例,介绍如何在 Windows 系统的本地电脑中使用远程登录软件登录 Linux 实例。
2.适用本地操作系统:Windows
3.鉴权方式密码密钥
4.前提条件

1)已获取登录实例的管理员帐号及密码(或密钥)。
2)云服务器实例已开通22号端口。

5.操作步骤

—使用密码登录

  1. 下载 Windows 远程登录软件,即 PuTTY。 PuTTY 的获取方式:点此获取

  2. 双击【putty.exe】,打开 PuTTY 客户端。

  3. 在 PuTTY Configuration 窗口中,输入以下内容。如下图所示:

    图片.png

    参数举例说明如下:

Host Name(or IP address):服务器的IP地址;
Port:服务器的端口,必须设置为22;
Connect type:选择 “SSH”;
Saved Sessions:填写会话名称,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,则后续使用时您可直接双击 “Saved Sessions” 下保存的会话名称即可登录服务器;

  1. 单击【Open】,进入 “PuTTY” 的运行界面,提示 “login as:”。

  2. 在 “login as” 后输入用户名,按 Enter

  3. 在 “Password” 后输入密码,按 Enter。 输入的密码默认不显示,如下图所示:

    图片.png

登录完成后,命令提示符左侧将显示当前登录云服务器的信息。

—使用密钥登录

  1. 下载 Windows 远程登录软件,即 PuTTy。 请分别下载 putty.exe 和 puttygen.exe 软件,PuTTy 的获取方式:点此获取

  2. 双击【puttygen.exe】,打开 PuTTy Key 客户端。

  3. 单击【Load】,选择并打开已下载的私钥存储路径。如下图所示: 例如,选择并打开文件名为 david 的私钥文件。

Ps: 当不存在私钥文件时,可以选择Conversions > Import key 导入公钥(.pem)文件来生成私钥文件(.ppk)


图片.png
  1. 在 PuTTY Key Generator 窗口中,输入密钥名和设置 PuTTY 用于加密私钥的密码,单击【Save private key】。如下图所示:


    图片.png
  1. 在弹出的窗口中,选择您存放密钥的路径,并在文件名栏输入“密钥名.ppk”,单击【保存】。例如,将 david 私钥文件另存为 david.ppk 密钥文件。如下图所示:
    图片.png
  1. 双击【putty.exe】,打开 PuTTY 客户端。

  2. 在左侧导航栏中,选择【Connection】>【SSH】>【Auth】,进入 Auth 配置界面。

  3. 单击【Browse】,选择并打开密钥的存储路径。如下图所示:


    图片.png
  1. 切换至 Session 配置界面,配置服务器的 IP、端口,以及连接类型。如下图所示:


    图片.png

Host Name (IP address):服务器的IP;
Port:服务器的端口,必须填 22;
Connect type:选择 “SSH”;
Saved Sessions:填写会话名称,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,则后续使用时您可直接双击 “Saved Sessions” 下保存的会话名称即可登录服务器;

  1. 单击【Open】,进入 “PuTTY” 的运行界面,提示 “login as:”。

  2. 在 “login as” 后输入用户名,按 Enter

  3. 在 “Passphrase for key "imported-openssh-key":” 后输入 步骤4已设置的密码,按 Enter。 输入的密码默认不显示,如下图所示:

    图片.png

登录完成后,命令提示符左侧将显示当前登录服务器的信息。

你可能感兴趣的:(SSH原理 and SSH远程登录)