学习是一个逐步发现自己无知的过程!

SSH密钥管理

1.SSH基本概述

SSH是Secure Shell Protocol的简写,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。

1.SSH远程服务主要功能

  - 1.提供远程连接服务器的服务
  - 2.对传输的数据进行加密

ssh是一个加密的远程传输协议。(进入了密封的隧道)

telnet是一个远程传输协议。(明文的传输)

 2.远程连接方式有哪些

ssh属于密文连接方式 监听在本地22/tcp端口(Linux、Unix、ubuntu、)

telnet属于明文连接方式 监听在本地23/tcp端口(路由器、交换机、防火墙)

 3.SSH远程连接与Telnet远程连接区别

ssh服务是加密服务协议,telnet服务是非加密服务协议

ssh服务默认支持root用户登录,Telnet默认不支持root用户登录

 4.安装telnet服务,然后使用root登录测试

  [root@web01 ~]# yum install telnet-server -y
  
  [root@web01 ~]# systemctl start telnet.socket

 5.使用xshell的新建标签,输入如下指令[登录不上]

  [e:\~]$ telnet 10.0.0.7
  
  Kernel 3.10.0-862.el7.x86_64 on an x86_64
  
  web01 login: root
  
  Password: 
  
  Login incorrect

 6.创建一个普通用户,再次使用telnet登录测试

  [root@web01 ~]# useradd od
  
  [root@web01 ~]# echo "1" | passwd --stdin od
  
   
  
  [e:\~]$ telnet 10.0.0.7
  
  web01 login: od
  
  Password: 
  
  Last login: Mon Sep 10 09:57:39 from ::ffff:10.0.0.1
  
  [od@web01 ~]$ 

 7.SSH远程故障连接

  - 服务端

22端口是否打开(telnet、nmap检测)

防火墙是否允许能连接22端口

  - 客户端

1.ping 127.0.0.1 检测TCP/IP协议栈(检查网卡是否故障)

2.ping 172.16.1.31 排查是否是交换机故障

3.ping 网关地址 数据包是否能抵达路由器

4.ping 域名 检查DNS是否异常

 2.SSH相关命令

SSH服务使一个C/S架构,有服务端,就有客户端

Windows客户端(Xshell、CRT)

Linux客户端(ssh命令)

  [root@backup ~]# yum provides `which ssh`
  
  [root@backup ~]# rpm -ql openssh-server
  
  /etc/ssh/sshd_config    --- ssh服务配置文件
  
  /usr/sbin/sshd          --- ssh服务进程启动命令
  [root@backup ~]# rpm -ql openssh-clients
  
  /usr/bin/scp            --- 远程拷贝命令
  
  /usr/bin/sftp           --- 远程文件传输命令
  
  /usr/bin/ssh            --- 远程连接登录命令
  
  /usr/bin/ssh-copy-id    --- 远程分发公钥命令

1 SCP远程拷贝 - 限制拷贝速度

1.仅支持全量拷贝,覆盖式,效率低,基于ssh协议传输的数据(安全)

      [root@nfs ~]# scp -rp nfs-file root@172.16.1.7:/tmp
      [root@nfs ~]# scp -rp  root@172.16.1.7:/tmp/yum.log  /tmp/

sftp-->XFTP

  - 1.支持批量上传文件
  - 2.支持单个文件超过4G
  - 3.支持断点续传

2.ssh远程登录服务器命令

   ssh -p22 oldboy@10.0.0.150 
  - \# SSH连接远程主机命令的基本语法;
  - \# ssh 命令
  
  -  \# -p(小写), 用于指定远程主机端口,默认22端口可省略
  -   \# oldboy@remotehost
  -  \# "@"前面为用户名,如果用当前用户连接,可以不指定用户
  -  \# "@"后面为要连接的服务器的IP

3.scp复制数据至远程主机命令(全量复制)

  - \# SSH连接远程主机命令的基本语法
  
  - \# scp 命令
  
  - \# -P(大写) 指定端口,默认22端口可不写
  
  - \# -r 表示递归拷贝目录
  
  - \# -p 表示在拷贝文件前后保持文件或目录属性不变
  
  - \# -l 限制传输使用带宽(默认kb)

推:PUSH,上传

       scp -P22 -rp /tmp/oldboy oldboy@10.0.0.150:/tmp
  
       /tmp/oldboy为本地的目录。
  
       “@”前为用户名
  
       “@”后为要连接的服务器的IP。
  
       IP后的:/tmp目录,为远端的目标目录。
  
       说明: 以上命令作用是把本地/tmp/oldboy推送至远端服务器10.0.0.150的/tmp目录
  

拉:PULL,下载

       scp -P22 -rp root@10.0.0.7:/tmp/oldboy /opt/
  
       还可以将远端目录或文件拉取至本地

结论:

  • 1.scp通过加密进行远程拷贝文件或目录的命令。

  • 2.scp拷贝权限为连接的用户对应的权限。

  • 3.scp支持数据的推送和拉取,但每次都是全量拷贝,效率低下。

4.SSH连接方式

1.账户和密码

      - **不方便**
  
      - **容易被攻击**

 2.秘钥的登录方式

你需要登录哪台服务器,就将自己的公钥推送至对应的服务器即可

1.创建密钥对

      [root@m01 ~]# ssh-keygen -t rsa -C sirliu.com   #一路回车即可
  
      [root@m01 ~]# ls ~/.ssh/
  
      id_rsa(钥匙)  id_rsa.pub(锁头)

2.发送密钥给需要登录的服务器即可

      [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31

Manager能通过密钥的方式连接 nfs和backup以及web

  //命令示例: ssh-copy-id [-i [identity_file]][user@]machine
  
  ssh-copy-id //命令
  
  -i          //指定下发公钥的路径
  
  [user@]     //以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
  
  machine     //下发公钥至那台服务器, 填写远程主机IP地址  

5.Linux实现秘钥管理

ssh-keygen

1.Window实现秘钥登录服务器

  - 1.Xshell工具->新建密钥生成工具->猛击下一步
  - 2.连接服务器,在当前用户的家目录创建.ssh目录(权限700)
  
  - 3.在.ssh目录新建authorized_keys,权限是600
  - 4.找到xshell里面工具-》用户秘钥管理者-》选中对应的秘钥-》属性-》公钥-》复制
  - 5.将复制好的公钥粘贴至  ~/.ssh/authorized_keys中 ,保存,然后测试  
  [root@web1-7 ~]# mkdir .ssh -p;chmod 700 .ssh/;touch .ssh/authorized_keys;chmod 600  .ssh/authorized_keys
  
          [root@web1-7 ~]# chmod 700 .ssh/
  
          [root@web1-7 ~]# ll .ssh/ -d
  
          drwx------ 2 root root 6 9月  12 08:39 .ssh/
  
          [root@web1-7 ~]# touch .ssh/authorized_keys
  
          [root@web1-7 ~]# ll  .ssh/authorized_keys -d
  
          -rw-r--r-- 1 root root 0 9月  12 08:40 .ssh/authorized_keys
  
          [root@web1-7 ~]# chmod 600  .ssh/authorized_keys 
  
          [root@web1-7 ~]# 

2.SSH访问控制

  - **变更端口**
  - **不使用公网IP**
  
  -  **禁止root登录**
  - **禁止使用密码登录**

3.SSH练习案例

SSH远程服务访问控制手段

  - **1.更改SSH服务远程登录端口(一般)**
  - **2.更改SSH服务监听本地内网IP(不重要)**
  
  - **3.更改SSH服务禁止ROOT管理员登录(重要)**
  - **4.更改SSH服务密码登录认证为密钥登录(重要)**
  
  - **5.重要服务器都不使用公网IP地址(重要)**
  - **6.使用防火墙限制来源IP地址(一般) **

4.SSH服务登录防护手段配置文件/etc/ssh/sshd_config

  Port 6666                   # 变更SSH服务远程连接端口
  
  ListenAddress 10.0.0.61     # 绑定本地内网地址
  
  PermitRootLogin             # 是否允许root用户远程登录
  
  PasswordAuthentication      # 是否允许使用密码登录
  
  UseDNS                      # 是否进行dns反向解析,影响ssh连接效率参数
  
  GSSAPIAuthentication        # 是否进行认证,影响ssh连接效率参数
  [root@m01 ~]# /etc/ssh/sshd_config
  
  \###SSH###
  
  Port 6666
  
  ListenAddress 10.0.0.61
  
  PasswordAuthentication no
  
  \#PermitRootLogin no
  
  GSSAPIAuthentication no
  
  UseDNS no
  
  \###END###
  
  [root@m01 ~]# sytemctl restart sshd
  测试
  
  [root@backup ~]# ssh 'root@172.16.1.61'
  
  ssh: connect to host 172.16.1.61 port 22: Connection refused   
  
  [root@backup ~]# ssh 'root@172.16.1.61' -p6666
  
  ssh: connect to host 172.16.1.61 port 6666: Connection refused   

远程控制卡dell idrac

 5.SSH练习案例

1.解法

  #1.先生成密钥对,分别在NFS和Backup上执行(-P指定密码 -f指定存放的位置)
  
  [root@backup ~]# ssh-keygen -P "" -f ~/.ssh/id_rsa
  
  [root@nfs ~]# ssh-keygen -P "" -f ~/.ssh/id_rsa
  
   
  
  \#2.推送nfs和backup的公钥至Manager(执行如下指令即可)
  
  ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.61

2.解法

  ##正常推送文件
  
  [root@m01 ~]# scp file root@172.16.1.31:/root
  
  file                                            100%    0     0.0KB/s   00:00    
  
  [root@m01 ~]# scp file root@172.16.1.41:/root
  
  file                                            100%    0     0.0KB/s   00:00    
  
  \###不跟任何参数无法推送目录
  
  [root@m01 ~]# mkdir dir
  
  [root@m01 ~]# scp dir root@172.16.1.41:/root
  
  dir: not a regular file
  
  \##加参数后
  
  [root@m01 ~]# scp -rp dir root@172.16.1.41:/root
  
  [root@m01 ~]# mv file dir 
  
  [root@m01 ~]# scp -rp dir root@172.16.1.41:/root
  
  file                                              100%    0     0.0KB/s   00:00 

3.解法(批量)

  [ $# -ne 1 ] && echo "Please Command" && exit 1
  
  for i in 31 41
  
  do
  
      echo "##############This is 172.16.1.$i##############"
  
      ssh root@172.16.1.$i "$1"
  
  done

ssh密钥登录

ssh-keygen 生成密钥

ssh-copy-id 推送公钥

ssh 远程连接

scp 远程拷贝

 ssh访问控制

- **1.不要公网IP**
- **2.修改SSH连接端口**

- **3.禁止root登录**
- **4.禁止密码方式登录**    

关于SSH密钥实例操作

SSH密钥提供一种更为安全的虚拟专有服务器登录机制,即利用SSH而非单纯依靠密码完成登录。与易被窃取的密码不同,SSH密钥几乎无法以暴力方式破解。生成的密钥对为我们提供两条字符串,即公钥与私钥。大家可以将公钥保存在任意服务器,并利用配备有私钥的客户端对该服务器者访问。当二者匹配时,系统即会解锁而不再需要输入密码内容。另外,大家也可以对私钥进行保护以额外提升安全性水平。

1 第一步——创建RSA密钥对

第一步是在客户设备上创建密钥对:

  ssh-keygen -t rsa

2 第二步——保存密钥与口令

输入Gen Key命令后,系统会提示以下问题:

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

这里可以直接按下回车,从而将该文件保存在用户home目录中(本示例中的用户名为demo)。

Enter passphrase (empty for no passphrase):

大家可以自行决定是否使用口令。输入口令的作法确有优势:无论密钥的安全性有多高,也无论其如何进行加密,最终效果依然取决于其是否无法为他人所获取。在使用口令时,即使受口令保护的私钥落入未授权用户手中,他们亦无法在不知道口令内容的情况下使用该私钥。当然,其缺点在于在每次使用时,我们都需要手动输入口令。

完整的密钥生成流程如下所示:

  ssh-keygen -t rsa
  
  
  Generating public/private rsa key pair.
  
  Enter file in which to save the key (/home/demo/.ssh/id_rsa): 
  
  Enter passphrase (empty for no passphrase): 
  
  Enter same passphrase again: 
  
  Your identification has been saved in /home/demo/.ssh/id_rsa.
  
  Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
  
  The key fingerprint is:
  
  4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
  
  The key's randomart image is:
  
  +--[ RSA 2048]----+
  
  |          .oo.   |
  
  |         .  o.E  |
  
  |        + .  o   |
  
  |     . = = .     |
  
  |      = S = .    |
  
  |     o + = +     |
  
  |      . o + o .  |
  
  |           . o   |
  
  |                 |
  
  +-----------------+

现在公钥已经保存在/home/demo/.ssh/id_rsa.pub,而私钥则保存在/home/demo/.ssh/id_rsa。

3 第三步——复制公钥

密钥对生成完成后,我们需要将公钥放置在需要使用的虚拟服务器当中。

大家可以使用以下命令将公钥复制到新设备的authorized_keys文件当中。请确保将用户名与IP地址替换为您的实际值。

  ssh-copy-id user@123.45.56.78

1

另外,大家也可以利用SSH直接粘贴密钥:

  cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

无论使用哪种方法,其显示结果应如下所示:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.

RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.

user@12.34.56.78's password:

Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in:

    ~/.ssh/authorized_keys

现在大家即可使用user@12.34.56.78实现登录而无需输入密码。不过,如果大家设置了口令,则需要在每次登录时都输入一次口令。

4 第四步(可选)——禁用Root登录密码

完成以上步骤后,我们还需要确保自己只能利用SSH密钥进行登录,即禁用root登录。

打开SSH配置文件:

  sudo nano /etc/ssh/sshd_config
  
  1

在文件中找到包含PermitRootLogin的一行,进行修改以确保用户只能利用SSH密钥完成登录:

  PermitRootLogin without-password
  
  1

重载以应用变更:

  reload ssh

5 Digital Ocean Addendum

DIgital Ocean控制面板允许大家在创建新Droplet时为其添加公钥。大家可以在方便的位置生成SSH密钥,例如本地计算机,而后将其公钥上传至-SSH key位置。

此后,在我们创建新的VPS时,即可选择在服务器上使用该公钥。如此一来,服务器不会通过邮件向我们发送root密码,我们亦能够通过选定的客户端登录至新的虚拟专有服务器。如果大家创建了口令,则需要在每次登录时正确输入。

赞(1)
未经允许不得转载:劉大帥 » SSH密钥管理

你的评论可能会一针见血! 抢沙发

登录

找回密码

注册