SSH-key连接原理

1,我们想通过远程的方式从我的电脑远程连接到对方的电脑上那么在LINUX系统下我们可以通过一种叫ssh的方式连接过去。SSH客户端(ssh命令)还包含一个很有用的远程安全拷贝命令scp。

2,有两种连接方式,

(1)telnet  这种是明文的容易让黑客捕获。

应用方式:安装telnet(远程登录的意思)

Yum –y install telnet

安装好后怎么链接呢?

如 telnet 192.168.112.356 22      IP是对方IP地址

                                                                      22端口号、

当然对方也要安装telnet

 

(2)ssh 是经过加密的。

3,ssh有两种级别的连接方式

第一种级别(基于口令的安全验证)

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

需要依靠秘钥,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

总结1,

ssh连接第一级别:

 ssh连接默认端口是22

(1)

 有两台电脑 A和B.                       A要登录 B电脑的超级用户

#ssh 192.168.29.144                   登录超级用户IP前不用加@

第一次连接 会问你 记录不记录对方IP地址, 必须记录 YES

之后对方密码弹出 输入对方的密码回车

用hostname –I  查看下本机IP地址,这样就是对方的IP地址对方的主机了。

然后exit退出,就等退出了

 

(2)

有两台电脑 A和B.                       A要登录 B电脑的普通用户  (不是超级用户)

添加个用户

    如我现在在另一台电脑添加用户

     Useradd yunjisuan   创建一个叫yunjisuan 的用户   路径时/home 目录

     Echo “123123” | passwd  - -stdin yunjisuan   给yunjisun 用户添加密码。

我现在在第一台电脑我用ssh连接另一台电脑的 yunjisuan用户

A电脑 输入: ssh yunjisuan@192.168.,29.144  (ip地址前不加东西就是超级用户)

之后输入密码:123123     就登录进去了

 

 

(3)

远程复制在电脑双方都要安装 scp命令

yum insiall openssh-clients   (打开ssh客户端)  安装scp远程复制命令

之后怎么做呢?

1,我在A电脑

映射一句话    到/etc/hosts里

 # echo "'hostname –I' www.yunjisuan.com" >> /etc/hosts

Cat /etc/housts 看一下。 没问题

再用scp复制,把A的housts目录复制到B电脑  超级用户 /root/etc下

#scp /etc/hosts  192.168.29.144:/etc/回车  复制hosts这个目录过去。

注意:没加root@192.168.29.1144 就是默认超级用户登录。

上B电脑查看 cat /etc/hosts  就有了

 

  2,以上我是把我A电脑的数据复制过。

去接下来。

我要把B电脑的数据拉过来怎么操作呢? 

  用#:scp root@192.168.29.144:~/222 .

        这是把B电脑的  根下YYY文件复制到我A电脑的  点 当前目录下。

 

 

 

总结2

ss h连接第二级别

秘钥的意义就在于不用输密码,就进入对方的服务端。

1,首先  创建秘钥对

ssh    Tab一下 会发现很多命令

   Ssh-Keygen 生成秘钥对的命令    (交互生成秘钥)

Ssh-copy-id分发秘钥对的命令

(1)# Ssh-Keygen 回车

会出来这三样,第一个…..(/root/.ssh/id_rsa) 这是这个命令 在根下root下 .ssh 点就是隐藏文件。后边的id_rsa就是秘钥对的名字     (在这个目录下生成一个叫id_rsa的文件)          

                       第二个是密码  直接回车不设就行

                       第三个也是密码,直接回车

                       就创建完了。

(2)#ls .ssh   看一下  有三个文件 分别是

id_rsa 私钥     id_rsa.pub 公钥           known_hosts远程登录记录

客户端拿私钥     服务端拿公钥 (就是谁登录谁 就把公钥发给谁)

私钥可以有很多份,但公钥只能有一份,私钥去找公钥。

(3)我现在在客户端创建了秘钥对

        现在得把公钥给服务端复制过去                    

怎么操作呢? 

首先(1)在服务端家目录下创建一个 mkdir  .ssh  目录

(2)ll  -d  .ssh/   看看他是什么权限?  为什么看呢?因为你的秘钥权限过大,Linux系统担心安全是不会让你成功的。

所以你得给它设置下权限(客户端服务端双方都要设置700权限)

      #:chmod 700 .ssh/             它权限必须是700

(3)在服务端把公钥改名vi /etc/ssh/sshd_config

         进入编辑器在47行  复制authorized_keys 这个名字

          mv id_rsa.pub authorized_keys     改成这个名字

                   set nu                                   显示行号

 

或者cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  这样改名

 

(5)现在来客户端把公钥 复制过去给服务端(或者相反)

#:scp .ssh/authorized_keys 192.168.29.144:~/.ssh/

(6)还有些提高效率的操作。

vim /etc/ssh/sshd_config 后  

79行改成no             (centOS6是81行 改成on)  这是验证改成on 不验了

115行改成no           (centOS6是122行 改成on)   NDS 改成no

之后重启一下systemctl restart network

然后scp /etc/ssh/sshd_config root@192.168.29.144:/etc/ssh/

这个sshd_config这个修改后的配置文件给对方发过去。覆盖对方的配置文件(省得对方改了)  这是ssh的配置文件。

对方也重启一下systemctl sshd reload

(7)ssh  192.168.29.144  这就无密码的连接上了 

 结束           这就是秘钥连接 免秘钥的过程。

但是你连普通用户照样还有密码,除非普通用户也有公钥照以上这么改。

 

示范一下连接普通用户

前提:要在对方电脑上创建个普通用户

(1)Useradd yunjisuan   创建一个叫yunjisuan 的用户  路径在/home 里

          Echo “123123” | passwd –stdin yunjisuan   给yunjisun 用户添加密码。

        (2)然后进去对方电脑普通用户下(yunjisuan下)创建

#:mkdir   .ssh 目录   

在改.ssh的属主为yunjisuan   #:chown yujisuan  .ssh

                权限为700           #:chown 700  .ssh

                                           #:ll –d .ssh   查看下

(3) 因为普通用户里没有.ssh目录。所有要把我方的公钥给复制过去到yunjisuan用户的超级用户也就是~家目录里

#scp ~/.ssh/authorized_keys yunjisuan@192.168.29.144:~

(4)然后进去对方电脑cd /home/yunjisuan  就有authorized_keys文件了。

在把authorized_keys移到  .ssh里

mv authorized_keys  .ssh

(5)但是这时我进的是普通用户,普通用户要能用这文件就要把authorized_keys的属主改成普通用户:   

#:chown yujisuan  authorized_keys

(6)连接ssh yunjisuan@192.168.29.144 就连接上了

 

 

 总结3

ssh 秘钥连接的简化方式

在客户端.ssh下  还有个ssh-copy-id  它是用来分发公钥的刚才服务端做的那些操作它都能自动来完成。

(1)

一条命令生成秘钥对。 而不用之前的ssh-Keygen 生成秘钥对的命令  (交互生成手动分发)

        -d dsa   指定加密算法 dsa

         -f         指生成的秘钥放在哪里

         -P         杠大P “”里边没东西就是空密码

#ssh-keygen –t dsa –f ~/.ssh/id_dsa –P “” 回车

(2)一条命令分发

我现在要分发

         -i    你要分发什么?(要分发这个~/.ssh/id_dsa.pub公钥)

         ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144

           现在进入服务端 家目录下/home

Ls –a 看一下  yunjisuan

最后一行多了一个700权限属主属组都是yungjisuan(直接就把权限改了)

回车后再看下.ssh里边公钥在不在。

    之后用客户端直接连接服务端。可以了

(3) 但是以上步骤分发秘钥时还需要输入密码。  怎么把这个密码也删掉呢?

       有个命令叫sshpass    需要云yum安装本地yum没有

sshpass –p “123123”   输入密码之后再分发。

       #sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144

      之后登陆OK了

(4)cd .ssh回车

Ls里有个这个目录  known_hosts 

这是记录来访的IP  如果要清空了,再去登陆对方还要输入密码

清理方法是[.ssh] #  > know_hosts

怎么做我在清空known_hosts后,在连接对方,还能免密的连接上呢?

需要再加几个参数:

–o StrictHostKeyChecking=no

#sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub “–o StrictHostKeyChecking=no  yunjisuan@192.168.29.144” 回车

(5)在连接就可以了                                           结束

转载于:https://www.cnblogs.com/changtianwei/p/9936178.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

byte[]和InputStream的相互转换

1、byte[]转换为InputStream InputStream sbs new ByteArrayInputStream(byte[] buf); 2、InputStream转换为InputStreambyte[] ByteArrayOutputStream swapStream new ByteArrayOutputStream(); byte[] buff new byte[100]; //buff用于存放循环读取的临时数据 int rc 0; …

[学习总结] python语言学习总结 (三)

函数闭包 定义 延伸了作用域的函数(能访问定义体之外定义的非全局变量 作用 共享变量的时候避免使用了不安全的全局变量允许将函数与某些数据关联起来,类似于简化版面向对象编程相同代码每次生成的闭包,其延伸的作用域都彼此独立(计数器,注册表)函数的一部分行为在编写时无法预…

jQuery中$.each()方法的使用

$.each()是对数组,json和dom结构等的遍历,说一下他的使用方法吧。 1、遍历一维数组 var arr1[aa,bb,cc,dd];//两个参数,第一个参数表示遍历的数组的下标,第二个参数表示下标对应的值$.each(arr1,function(i,val){console.log(ival…

【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-6 迪米特原则(最少知道原则)...

/** * 软件设计七大原则-迪米特原则 学习笔记 * author cnRicky * date 2018.11.10 */迪米特原则(最少知道原则) 一个对象应该对其他对象保持最少的了解。又叫最少知道原则 迪米特原则主要强调:尽量降低类与类之间的耦合 优点:降…

ORA-01745: 无效的主机/绑定变量名

问题描述:oracle中执行插入语句时报错 解决方案:缺失逗号

to_date , to_char

select sum(t.paid_fee)from order_payment_log twhere to_char(to_date(t.edit_time, yyyy-MM-dd HH24:mi:ss),yyyy-MM-dd) to_char(sysdate, yyyy-MM-dd)and t.paid_state Y; to_char to_char:将日期转换为字符串, to_char(to_date(t.edit_time, yyyy-MM-dd HH24:mi:ss),yy…

Duplicate local variable variable

问题描述:重复定义了变量。

mac/linux 解决启动命令行出现declare问题

问题描述:启动命令行时出现以下现象,如图所示: 问题解决: 在配置环境变量时,在某一行直接单独写了一个export,要么在bashrc中,要么在bash_profile等配置文件中,系统加载环境变量时就出现了上述情…

java 取Blob转为String

InputStream ins null;StringBuffer sb new StringBuffer();try {//blob要转换的Blob字段。ins blob.getBinaryStream();byte[] dis new byte[1024];int len 0;//开始处理流,并且显示while ((len ins.read(dis)) ! -1) {String disp new String(dis,0,len);sb.append(di…

分式递推

对于一类问题,比如是数列(递推),然后给你两头的a[1]和a[n],如果含有分式,可以考虑乘过去,和一种二分的题目比较像,可能就会发现递推的规律,而且递推也可以只搞系数,没必要…

Blob和Clob的区别和用法

BLOB和CLOB都是大字段类型, 1、BLOB是按二进制来存储的,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。 2、CLOB是可以直接存储文字的,像文章或者是较长的文字,就用CLOB存储&#xf…

MVC 模式和模型 2

MVC框架 一个实现 MVC 模式的应用包含模型、视图、控制器 3 个模块: 模型:封装了应用的数据和业务逻辑,负责管理系统业务数据 视图:负责应用的展示 控制器:负责与用户进行交互,接收用户输入、改变模型、调整…

splite和map的结合使用

split() 方法用于把一个字符串分割成字符串数组。 Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。 作用&#xff1a;分割出来的字符串储存在map对象(key,value)中&#xff0c;便于前后台使用。 Map<String, Object> paramMap new HashMap<S…

Delphi与各数据库数据类型比较

Delphi数据类型与各数据库数据类型对比如下表&#xff0c;如有具体说明见表中脚注&#xff1a; Delphi Type Oracle Types SQL Server Types MySQL Types [1] InterBase Types PostgreSQL Types SQLite Types ftSmallint NUMBER(p, 0)[2] (p < 5) SMALLINT …

mybatis foreach collection

foreach的主要用在构建in条件中&#xff0c;它可以在SQL语句中进行迭代一个集合。 foreach元素的属性主要有 item&#xff0c;index&#xff0c;collection&#xff0c;open&#xff0c;separator&#xff0c;close。 item表示集合中每一个元素进行迭代时的别名&#xff0c;in…

Java中线程池,你真的会用吗?

在《深入源码分析Java线程池的实现原理》这篇文章中&#xff0c;我们介绍过了Java中线程池的常见用法以及基本原理。 在文中有这样一段描述&#xff1a; 可以通过Executors静态工厂构建线程池&#xff0c;但一般不建议这样使用。 关于这个问题&#xff0c;在那篇文章中并没有深…

java (lodop) 打印实例

首先在lodop官网下载相关文件&#xff08;js、css等&#xff09;&#xff1a;http://www.lodop.net/download.html 在下载好的包里 除了html页面 其他的js、css等拷贝到项目的一个目录下、新建个lodop文件夹。 lodop主要接口函数如下&#xff1a; ● PRINT_INIT(strPrintTaskN…

深入了解java虚拟机(JVM) 第四章 对象的创建

一、对象的创建过程 对象的创建过程大致可以分为六步&#xff0c;其中对象的分配尤为重要&#xff1a; 二、对象分配内存 一般来说对象分配内存有两种方式&#xff1a; 第一种是指针碰撞&#xff0c;这是一种比较理想的方式&#xff1a;如果Java堆是绝对规整的&#xff1a;一边…

LODOP使用问题解决汇总

LODOP 打印控件出现问题及修改方法 问题1 、打印网页时页面出现电脑设置的底色如何解决&#xff1f; 解决方法 &#xff1a;按照如下方式添加HTML页面 var strHTML"<body stylemargin:0;background-color: white>"document.getElementById("table02&qu…

[UWP]使用Picker实现一个简单的ColorPicker弹窗

[UWP]使用Picker实现一个简单的ColorPicker弹窗 原文:[UWP]使用Picker实现一个简单的ColorPicker弹窗在上一篇博文《[UWP]使用Popup构建UWP Picker》中我们简单讲述了一下使用Popup构建适用于MVVM框架下的弹窗层组件Picker的过程。但是没有应用实例的话可能体现不出Picker相对于…