SSH安全免密码登陆,数据在使用ssh方式传输的时

2019-10-06 09:29 来源:未知

SSH是什么

  1. Secure Shell 安全外壳协议
  2. 建立在应用层基础上的安全协议
  3. 可靠、转为远程登陆会话和其他网络提供安全性的协议
  4. SSH客户端是用于多种平台

1.背景介绍

SSH协议

SSH服务,

  SSH: (Secure Shell)的缩写,是建立在应用层和传输层基础上的安全协议,SSH是目前 较为可靠的专为远程登录会话和其他网络服务提供安全性的协议,数据在使用ssh方式传输的时候是加密的,即使别人截获也不知道是什么数据;为客户端提供安全的Shell环境,用于远程管理,默认端口:TCP 22 telnet 23
SSH基于公钥加密(非对称加密)技术:
              数据加密传输;
                 客户端和服务器的身份验证;
相关软件包:

       永利平台娱乐 1

      配置文件参考:

         永利平台娱乐 2

            相关登录信息:

             永利平台娱乐 3

        命令:可以用-p选项指定端口号登陆:
      ssh 192.168.1.108 -p 222           

1》安装相关软件,默认已经安装;

     永利平台娱乐 4

  2》修改配置文件,用xshell软件远程登录:
  1>密码认证(默认使用,认证的用户需要本地存在,/etc/passwd /etc/shadow),

         简单配置:

          永利平台娱乐 5

          永利平台娱乐 6

   永利平台娱乐 7

      2>密钥认证:

          永利平台娱乐 8

      上述文件存放本地主机当前用户ssh连接过的服务器的公钥,存放在当前用户的家目录下的.ssh目录里,此文件不需要自己创建,ssh连接之后就会自动创建;
============= 公钥认证客户端具体流程(刚刚开始):  

     永利平台娱乐 9

        永利平台娱乐 10

      永利平台娱乐 11

       ==========================SSH公钥认证流程:

        永利平台娱乐 12

实例分析:
1》客户端用普通用户创建密钥对:

      永利平台娱乐 13

         注意:公钥和私钥,还有ssh配置文件的权限绝对不可以乱动,都是为600:

        永利平台娱乐 14

  2》将用户的公钥上传到服务器的root用户家目录下.ssh/authorized_keys:
   方法:

      永利平台娱乐 15

       永利平台娱乐 16

   3》在客户端进行验证,注意要用普通用户来登录服务器的root用户权限:

       永利平台娱乐 17

  ==============在xshell上使用密钥认证登录:

密钥的功能可分为两种:

*  数据加密;能保证所发送数据的机密性;
  数字签名:能保证数据完整性,身份验证和不可抵赖;

===============数字签名原理:*

    永利平台娱乐 18

 ===============密钥的额外功能使用:
1》定时可以在客户机上远程执行服务器上的脚本,而不用登录服务器?
       答:在客户机上写一个脚本触发服务器上的脚本,然后在客户机上执行计划任务就可以了,客户机与服务器之间必须配置密钥认证;

        永利平台娱乐 19

2》通过SSH可以运行服务器中的窗口程序:
  ssh -X [email protected]
  然后运行相关窗口程序命令,不过客户端必须在图形界面下的虚拟终端上运行命令;             

  ===================问题:
1>scp远程复制文件和ssh远程登录都可以使用-p来指定端口号;
2>ssh-copy-id 只能使用22号端口;
3>ssh的安全性问题?你有哪些措施?
  密钥认证;
  不允许root登录;
  只允许某些固定的IP地址ssh过来(使用TCPWrappers中的hosts.allow,hosts.deny);

 

     永利平台娱乐 20

        使用chkconfig --list 命令可以查看有哪些独立进程和超级进程     

         永利平台娱乐 21

  4>SSH日志存放地方?
  /var/log/messages
  /var/log/secure
  5>密钥文件的权限性问题?
  不可以随便改动,必须保持600权限,know_hosts文件也一样;
  6>SSH连接比较慢?
  将服务器中的配置文件sshd_config文件中的UseDNS选项注释去掉,并no,不让SSH服务器去进行DNS解析,这样可以节省大量时间;
  7>SSH远程登录执行脚本,如果突然网络断开了,脚本是否会继续执行?
  脚本会继续执行,当网络再次连接上后,如果客户端是在命令行上SSH连接的,那么客户端会自动再次连接上服务器;
  8>xshell中如何使用密钥连接服务器?
  Linux服务器首先生成一对密钥;将私钥发送给Windows客户端,并且将用公钥生成authorized_keys 文件;然后就可以在xshell端用密钥认证方式登录了;
  9>批量运维问题?
  使用要求:客户端与服务器之间要建立单向信任关系,密钥认证:
  pssh ------>parallel 并行 --->批量执行命令
  pscp------->批量传输文件

 

SSH: (Secure Shell)的缩写,是建立在应用层和传输层基础上的安全协议,SSH是目前 较为可靠的专为远程登录会话和其他网络服务提供...

服务器安装SSH服务

  1. 安装:yum install openssh-server
  2. 启动:service sshd start
  3. 设置开启运行:chkonfig sshd on
  4. 查看进程是否存在:ps -ef |grep ssh

平时我们都是通过输入账号和密码的方式登陆远程终端,那有没有其他的玩法呢?答案是:当然有!下面就介绍一种通过密钥的方式登陆SSH。

概述

  • ssh协议, 安全壳协议, 可以安全远程登录Linux主机, 专为远程登录会话和其他网络服务提供安全性的协议. openssh是ssh协议的开源免费实现

  • ssh协议客户端和服务端

    • ssh协议包括客户端和服务端
    • 客户端需要安装openssh-clients, 才能使用ssh命令登陆到其他主机, 客户端配置文件为/etc/ssh/sshd_config;
    • 服务端需要安装openssh-server, Linux安装后会默认安装该软件, 并且开启sshd服务, 服务端配置文件为/etc/ssh/ssh_config
  • 加密算法

    • 对称加密算法: 加密和解密的密钥是同一个
    • 非对称加密算法: 公钥用于加密, 私钥用于解密, 常用算法RSA

客户端安装SSH工具

  1. win平台使用xshell
  2. Linux平台需要安装客户端软件:yum install openssh-clients

工具准备:一台电脑(推荐Win10),一台虚拟机(推荐VMware Workstation11),SSH登陆工具(xshell,securecrt,putty,推荐xshell),Linux系统(RedHat,CentOS,debian,Ubuntu,推荐centos7.3)。

远程登陆示例

通过ssh web02命令切换到另一台服务器到底做了什么操作呢?

首先查看/etc/ssh目录, 如下

sshd_config       
ssh_host_dsa_key.pub  
ssh_host_key.pub  
ssh_host_rsa_key.pub
ssh_config  
ssh_host_dsa_key  
ssh_host_key          
ssh_host_rsa_key

openssh默认加密算法是使用RSA非对称加密算法, 安装sshd服务后, 会在etc/ssh目录下生成ssh_host_rsa_key.pub公钥和ssh_host_rsa_key私钥, 公钥用于加密, 私钥用于解密

当执行ssh web02命令, 到底发生了什么?
使用web01和web02两台机器测试下

  • web01对应ip为192.168.5.131(充当客户端)
  • web02对应ip为192.168.5.132(充当服务端)
[root@web01 .ssh]# ssh web02
The authenticity of host 'web02 (192.168.5.132)' can't be established.
RSA key fingerprint is 46:f0:2a:ce:81:72:ad:84:8f:69:e0:c5:7b:e0:bd:79.
Are you sure you want to continue connecting (yes/no)?

如果选择yes, 则会把web02的公钥(ssh_host_rsa_key.pub)追加到web01的/root/.ssh/known_host文件下, 然后输入密码, 就可以登录到web02上, known_host会追加上如下内容

web02,192.168.5.132 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtTM1HQVXDDeMABX1rtgx3AwKAIcfX/eGN4eFj3XjARyVcEqTXdjc+4/Gqdv9QTHdFsIeFrVHeyjuPLuoLAZZ1cBUmoUVp7dYdkUnX0of1CTOTO2+g1K2T4nCshh7uzL2euHAWmQ9VcXwrBeKAiO7rOuW3fiQ5kUAtLVTTow8Ewus3U7Tqim0dkc+1Fc6FXowsSTqxMEsJDJ52pZV6wjoZHkoQVETolf160CJgWelDmMiJ6sDrYSaxnD7XK7Wx4IjUkTp9OJ2jBWlOfRkdRgyIT1CBol24/JqlVI6EAxTCKemap+piCKtD7QPIPmTG5PhlHAg6pQYgTWzqJypSuA9ww==

当输入yes时, web01会保存web02的公钥, 然后使用保存的web02公钥去加密对称加密密钥, 然后web02使用非对称加密密钥解密对称加密密钥, 获取出用于对称加密的密钥, 然后web01就可以通过对称加密的密钥去加密信息, web02使用该密钥解密传输信息, 包括用户名和密码, 从而进行验证登陆, 包括后续操作, 都是使用对称加密的密钥进行操作

为什么要不使用对称加密?

  • 对称加密算法首先是客户端和服务端都要知道该密钥, 如果明文传输被截获, 将会非常危险, 所以需要使用非对称加密算法去加密该密钥

为什么不都使用非对称加密算法,

  • 非对称加密非常耗费资源

客户端链接SSH服务

  1. 在win,打开xshell,新建一个会话:ssh root@192.168.2.20,输入密码就可以了进来了
  2. 在Linux,还是:ssh root@192.168.2.20

下面开始动手操作。

使用密钥对远程登录

如何不用输入密码, 直接使用ssh web02登录呢? 可以通过密钥对的方式实现

  • 首先使用ssh-keygen生成认证公钥和私钥
[root@web01 .ssh]# ssh-keygen 
Generating public/private rsa key pair.
# 生成密钥对位置
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
aa:50:bf:f1:29:bc:3e:82:f6:a8:50:27:72:e0:7d:9c root@web01
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|.                |
|... . .          |
|..+.oE  S        |
| + +.. .         |
|. .. .+          |
|. oo..++ .       |
|.o..oo++o        |
+-----------------+

查看/root/.ssh/目录, 会生成出公钥id_rsa.pub和私钥id_rsa

-rw-------. 1 root root 1675 1月  21 06:48 id_rsa
-rw-r--r--. 1 root root  392 1月  21 06:48 id_rsa.pub
-rw-r--r--. 1 root root  401 1月  21 06:05 known_hosts
  • 执行命令ssh-copy-id uar@web02将web01 root生成的id_rsa.pub公钥内容追加到web02:/home/uar/.ssh/authorized_keys文件中, 查看该文件
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwbY6ICbevXjm1m5yQCVn6z5DPHx9+Wq2CJOk0lxHC5iRdn9YpNE9D27MLyK5Cf9FHv2hLxvYKwmB+9qrZvhw0I6+QeLyYtPG98LvsbKYY9JbFC72NlE4UMYiDGVj5/PMtHosViSCfAiTf3OH07Rg91o4+qFVrs8UKgOwtNUwQMCHkAdLJz6UibPvvv3oPKjVbo0qeUOfsmZ2TOIcbJdWBlighet3yP8gjylhKfgdPVcHo4dY7WoVAZ+3qGZjmXvp4oIoEpMAPNr8ksu7yxeYyjmREzxpSdACmFDC6h5U8DtjksZaC1uICGQdPtu48pQvoDY6uT3XkkDdco/KYBza+Q== root@web01
  • 当执行ssh uar@web02时, web02会用web02:/home/uar/.ssh/authorized_keys文件中保存的web01的公钥去加密一个随机数, 传递给web01, 然后web01使用私钥解密, 再传递给web02, web02比对相同, 就确定客户端可靠, 就可以建立连接

  • 不使用ssh-copy-id如何实现?
    首先将id_rsa.pub复制到web02:/root目录中

[root@web01 .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts

[root@web01 .ssh]# scp id_rsa.pub web02:/root/id_rsa_web01
root@web02's password: 
id_rsa.pub                                                                                      100%  392     0.4KB/s   00:00    

使用密码登陆到web02上

[root@web01 .ssh]# ssh web02
root@web02's password: 
Last login: Sun Jan 21 06:46:45 2018 from web01

将id_rsa_web01 文件追加 /home/uar/.ssh/authorized_keys

[root@web02 ~]# ls
1.php  anaconda-ks.cfg  id_rsa_web01  install.log  install.log.syslog

[root@web02 ~]# mkdir /home/uar/.ssh
mkdir: 无法创建目录"/home/uar/.ssh": 文件已存在
[root@web02 ~]# cat id_rsa_web01 >> /home/uar/.ssh/authorized_keys
[root@web02 ~]# exit
logout
Connection to web02 closed.

就可以直接使用该命令切换到uar@web02

[root@web01 .ssh]# ssh uar@web02
Last login: Sun Jan 21 07:13:30 2018 from web01

将id_rsa_web01追加到其他用户家目录下.ssh/authorized_keys文件中, 就可以在web01上直接通过ssh命令登陆到web02上, 无需输入密码.

windows环境中使用xshell, 也可以生成密钥对 然后将公钥传到主机上, 就可以直接使用私钥进行登录, 如下

打开xshell, 菜单 > 工具 > 新建密钥生成向导, 一路下一步, 然后将公钥保存到文件, 将公钥传到主机上, 使用cat id_rsa_2048.pub.window >> ./.ssh/authorized_keys将公钥追加到authorized_keys文件中, xshell新建连接, 用户登录验证, 选择Public key, 用户密钥, 选择刚才生成的密私钥, 保存后, 就可以不使用密码进行登录

SSH config

  1. config为了方便我们管理多个ssh
  2. config存放的路径:~/.ssh/config
  3. config配置语法
  4. 关键字:
Host 别名
HostName 主机名
Port 端口
User 用户名
IdentityFile 密钥文件的路径
  1. 具体的操作

    • 首先使用ssh root@192.168.2.20登陆,然后cd ~/.ssh/
    • 此时会发现没有这个config这个文件
    • 创建一个config文件:touch config
    • vim config进入这个文件,输入i,进入编辑模式,如图,然后按esc,输入:wq保存退出

    永利平台娱乐 22

    • 此时输入:ssh imooc 就可以快速链接了,当然了,在配置文件中可以输入不同的别名,这样多的话就方便管理了

2.实验步骤

SSH安全免密码登陆:ssh key

  1. ssh key使用非对称加密方式生成公钥和私钥
  2. 私钥存放的位置在本地 ~/.ssh目录
  3. 公钥可以对外公开放,放在服务器的~/.ssh/authorized_keys
  4. Linux平台生成ssh key
    • ssh-keygen -t rsa
  5. Win
    • 在xshell中,工具--新建用户密码生成向导--下一步
    • 到输入密钥名称这个得记住imocc_linux,然后下面的密码可以输入也可以不输入
    • 另存为文件就可以
    • 然后需要把生成的这个的公钥放到服务器上,进入 cd ~/.ssh/
    • 发现没有那个文件,这个时候新建一个 touch authorized_keys文件
    • 用vim打开,把生成的公钥复制进来就可以了,然后保存退出
    • 这个时候在xshell中新建一个会话就可以免密码登陆了,如图:
      永利平台娱乐 23
  6. Linux

    • 首先cd ~/.ssh/
    • 开始生成ssh-keygen -t rsa,此时输入文件的名字,imooc_rsa,这个得记住,然后下面的密码可以输入也可以不输入
    • 此时ls查看一下就可以看到,如图:
      永利平台娱乐 24

    • 此时用cat imooc_rsa.pub看到公钥,把这个复制下来

    • 还是放入到touch authorized_keys文件中,此时这个文件中已经有连个公钥了
    • 永利平台娱乐,然后把私钥加入到本地空间中ssh-add ~/.ssh/imooc_rsa

假设你已经通过ssh工具登陆上了linux终端。

SSH安全端口

  1. 如何改变SSH服务端口,修改/etc/ssh/sshd_config配置就可以了
  2. 修改Port对应的值就可以了,如图:
    永利平台娱乐 25

  3. 服务重启:service sshd restart

(1)生成公钥和私钥

ssh-keygen -t rsa

Enter file in which to save the key (/root/.ssh/id_rsa): ##直接回车使用默认路径

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase): ##输入密码

Enter same passphrase again: ##重复密码

在/root/.ssh/目录下会生成两个文件,id_rsa为私钥,id_rsa.pub为公钥。私钥自己下载到本地电脑妥善保存,公钥则可以任意公开。

(2)下载私钥到windows

sz /root/.ssh/id_rsa

如果没有请安装软件包lrzsz(yum install -y lrzsz)

TAG标签:
版权声明:本文由永利平台娱乐发布于新闻动态,转载请注明出处:SSH安全免密码登陆,数据在使用ssh方式传输的时