• 传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
  • 而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
  • SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。

1. ssh 协议框架中最主要的部分是三个协议:


  • 传输层协议:提供 服务器认证 ,数据机密性,信息完整性等支持。
  • 用户认证协议:为服务器提供客户端的身份鉴别。
  • 连接协议:将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。

2. ssh 的安全验证:


a. 基于密码

  • 对于客户端来说:知道账号和密码即可登录到远程主机,并且所有传输的数据都会被加密。但是:可能会有别的服务器冒充真正的服务器!这种方式无法避免被【中间人】攻击
  • 对于服务器端,主机将自己的功用密钥分发给相关的客户端,客户端在访问主机时则使用该主机的公开密钥来加密数据。主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确保数据的保密性。

b. 基于密钥

  • 客户端需要为自己创建一对密钥,并将公有密钥放到需要访问的服务器上。客户端软件向服务器服务器发出请求,请求用客户端自己的密钥进行安全验证。
  • 服务器端在收到请求以后,先在发送请求客户端的用户根目录下寻找客户端的公用密钥,然后把它和客户端发送过来的公有密钥进行比较,如果两个密钥一致,服务器就用公有密钥加密【质询】(challenge)并把它发送给客户端软件。从而能够避免被【中间人】攻击。
  • 在这种方案中,需要存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提供给认证中心,而任何作为客户端的主机则只要保存一份认证中心的公开密钥就可以了。这种模式下,客户端必须访问认证中心然后才能访问服务器主机。

3. 使用XShell连接服务器(SSH模式)


a. 在XShell上生成密钥对(客户端创建自己的密钥对)

  • 打开Xshell,在菜单栏点击“tools”,在弹出的菜单中选择“User Key Generation Wizard...”(密钥生成向导);
  • 弹出“User Key Generation Wizard”对话框,在“Key Type”项选择“RSA”公钥加密算法,“Key Length”选择为“2048”位密钥长度;
  • 点击“Next”,等待密钥生成;
  • 继续下一步,在“Key Name”中输入Key的文件名称,我这里为“key”;在“Passphrase”处输入一个密码用于加密私钥(密码A,下面会用到),并再次输入密码确认;
  • 点击“Next”,密钥生成完毕(Public key Format选择SSH2-OpenSSH格式),这里显示的是公钥,我们可以复制公钥然后再保存,也可以直接保存公钥到文件,如下图。私钥这里不显示,可以在“User Key Mangager...”导出到文件;
  • 点击“Save as file...”按钮,将公钥(Public key)保存到磁盘,文件名为“key.pub”,备用。

b. 将密钥上传公钥(Public Key)到服务器(服务器配置客户端公钥,这里的用户为 root)

  • 使用到Xshell登录到服务器,进入到“/root/.ssh/”目录,运行rz命令(如果没有rz命令,运行yum install lrzsz安装),将key.pub发送到服务器,然后运行如下命令,将公钥(Public Key)导入到“authorized_keys”文件:
[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# rz
rz waiting to receive.
[root@localhost .ssh]# cat key.pub >> authorized_keys
[root@localhost .ssh]# chmod 600 authorized_keys
[root@localhost .ssh]# ls
authorized_keys key.pub
  • 使用命令 ifconfig 查看服务器的 ip 地址,并记录下来留下面使用。

c. 配置Xshell使用密钥认证方式登录到服务器

  • 打开Xshell,点击“New”按钮,弹出“New Session Properties”对话框,在“Connection”栏目中,输入刚刚配置好公钥(Public Key)的IP地址和端口;
  • 点击左侧的“Authentication”,切换到认证栏目,在“Method”选择“Public Key”认证,用户名输入“root”(公钥是放在root目录下的.ssh文件夹中),在“User Key”中选择我们刚才生成的私钥“key”,“Passphrase”中输入私钥的加密密码(密码A);
  • 点击确定,Xshell配置ssh免密码登录配置完成。

4. Linux下使用命令(ssh-keygen)生成密钥对

~$ ssh-keygen -t rsa

5. 阻止基于密码登陆的方式(只允许SSH登陆)

首先要已经设置好了允许 SSH 登录,并已经以SSH方式登录到了系统。

~$ su	# 切换到root
~$ vim /etc/ssh/sshd_config
# 此时因为使用 SSH 登陆,下面的应该已经设置:
# RSAAuthentication yes
# PubkeyAuthentication yes
# PermitRootLogin yes
# 默认情况下密码登录是 yes :
# PasswordAuthentication yes
# 要禁用的话改成 no :
# PasswordAuthentication no
# 推出 vim 后重启 SSH 服务
~$ service sshd restart

附录

SSH 学习记录及在SSH模式下使用XShell连接服务器的更多相关文章

  1. NodeJs学习记录(二)win7下 配置node连接oracle的环境

    2017/01/23 星期一 前言:还没看几眼教程,就开始分配任务,涉及到连oracle数据库,所以顺便把整个环境的配置放上来 安装文件清单(1).node-v6.9.1-x64.msi(2).pyt ...

  2. Liunx中三种网络模式配置及Xshell连接

    Liunx网络配置 NAT模式下的网络配置: 首先打开网络配置文件:vi   /etc/sysconfig/network-scripts/ifcfg-ens33 修改网卡信息,配置动态Ip过程中,只 ...

  3. CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解

    CAS (6) -- Nginx代理模式下浏览器访问CAS服务器网络顺序图详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1. ...

  4. usb-host一步一步学(二)安卓在usb-host模式下列出当前连接的usb设备

    之前写了一个简单的例子usb-host一步一步学(一)安卓在usb-host模式下列出当前连接的usb设备,下面的这个例子是获取各种usb设备.usb接口以及usb连接点(endpoint) 正如上一 ...

  5. Linux配置SSH和Xshell连接服务器

    >>>>>Ubuntu安装和配置ssh教程 SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑 上是否安装了 ...

  6. MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  7. Window下使用Xshell连接VirtualBox中CentOS SSH最佳实践

    网上已经有非常多讲怎样连接VMware的文章.可是针对一些可能遇到的细节没有讲全. 这里会有一个非常 实际的样例,附带全部软件的链接,保证成功. 最佳实践什么的都是骗人的. 1.安装VirtualBo ...

  8. vueHistory 模式下,布置到服务器上路由刷新会报nginx404错误

    之前写完vue项目后,布置到服务器,用nginx反向代理后,一开始进去,进各种路由都是没问题的,但是一旦f5刷新后就会出现一个nginx404的错误. 经过翻阅vue文档后,发现这是vueHistor ...

  9. 痞子衡嵌入式:揭秘i.MXRT600的ISP模式下用J-Link连接后PC总是停在0x1c04a的原因(Debug Mailbox)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT600中的Debug Mailbox实现对JLink调试的影响. 事情缘起痞子衡的同事 - 喜欢打破砂锅问到底的Kerry小 ...

随机推荐

  1. Android高级工程师面试题整理

    这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的题目.熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率. 主要分为以下几部分: (1)java ...

  2. date +%F时间日期

    date  +%Y -%m-%d   年月日 date  +%T   显示时间   HMS几点几分几秒 -%H  为小时 %w  周几 date   -d   “-1day”   一天之前 date  ...

  3. PIE SDK矢量数据编辑事件的监听

    1.功能简介 通过IEditEvents接口,开发者可以监听到Editor对象的相关的事件,并且做出反应.包括Editor中开始编辑.结束编辑等操作,下面对矢量数据的编辑事件的监听功能进行介绍. 2. ...

  4. PIE SDK专题制图另存模板

    1.功能简介 在PIE SDK中,所有的制图元素.视图范围以及排版等都可以保存成一个模板,以供多次重复使用.使用模板时只需要打开该模板,加载相应数据,就可以直接出图,省去了重复制作图幅的麻烦,方便快捷 ...

  5. Java调度线程池ScheduleExecutorService

    如果在一个ScheduleExecutorService中提交一个任务,这个任务的调度周期设置 的时间比任务本身执行的时间短的话会出现什么情况?也就是在线程调度时间已经到了 但是上次的任务还没有做完的 ...

  6. 成功配置TOMCAT的LOG4J日志系统,格式:HTML+每天以YYYY-MM-DD.LOG命名的日志文件

    关于log4j.properties文件在web项目中放的位置,找过很多,最后实践结果是: 一.web项目 二.放在src的目录里面,然后项目生成后会自动在\WEB-INF\classes文件里有份l ...

  7. PHP冒泡排序的实现方法

    <?php function BubbleSort($arr){ $count = count($arr); if($count<=1){ return $arr; } for($i=0; ...

  8. DBNull.Value.ToString() == string.Empty

    Console.WriteLine(DBNull.Value.ToString() == string.Empty); //True

  9. backbone应用笔记

    由于公司手机端web的需要,最近开始用上backbone,之前觉得很难学,也一直没看到前端mvc具体是个啥,后来由于项目紧急,就抽空看了一遍underscore和backbone的源码,收获还是蛮大的 ...

  10. JS常用的设计模式(4)——适配器模式

    去年年前当时正在开发dev.qplus.com, 有个存储应用分类id的js文件, 分类id的结构最开始设计的比较笨重. 于是我决定重构它. 我把它定义成一个json树的形式, 大概是这样: var ...