ssh协议


为什么使用ssh协议?

在进行传输时,会对数据进行加密,保证会话安全;telnet协议不是加密传输,在传输过程中如果被抓包,就会造成信息泄露,telnet默认不支持root远程。

# 常用协议端口
ftp 21
ssh 22
telnet 23 # 不支持root登陆
rsync 873
rdp 3389

ssh的相关命令


# 1、ssh远程登陆
ssh username@IP -p portnumber
username 表示的是用户名
-p 指定端口
IP 表示的是远程主机的IP # 2、scp文件传输
scp local_file username@IP:/dir

ssh免密登陆

原理


SSH免秘钥登录 就是避免了主机之间ssh需要输用户名和密码这一步。

  • 公钥(id_dsa.pub)
  • 私钥(id_dsa)
  • 授权列表文件(authorized_keys)

实现方法:以A B两台机器为例

1.A机器分别生成各自的公钥(id_dsa.pub)+私钥(id_dsa),使用ssh-keygen命令,rsa|dsa两种加密方法,任意选一个。

ssh-keygen 然后全部默认回车;在 ~/.ssh目录下查看生成了 id_dsa.pub+id_dsa

2.将A的公钥内容添加到B机器的授权列表文件(authorized_keys)

ssh-copy-id -i /root/.ssh/id_rsa.pub root@B机器的IP

AB机器ssh免秘钥互相登录啦

登录原理过程:以A机器ssh登录B机器为例。

1.A向B发送登录请求

2.B 在自己的授权列表文件中查看是否有A的公钥;没有则拒绝A登录

3.B中有A公钥,则B随机生成一个字符串,并用A的公钥进行加密,发送给A

4.A 收到加密后的字符串,用自己的私钥进行解密,得到原始字符串,返回给B

5.B 对比字符串,如果一致就授权A登录。 A登录B 成功。

实现过程


  • 客户机(跳板机)----私钥 id_rsa
  • 服务端------公钥 id_rsa.pub

# 1、创建密钥对
[root@web02 ~]# ssh-keygen
-t 指定加密算法 dsa rsa两种算法 # 2、发送公钥(需要知道root密码)
[root@web02 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.7
-i 指定公钥 # 2-1 发送公钥(不需要知道root密码)
1、客户端查看公钥
[root@web02 ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD+xIvwrNgftG9mVbeTh+iTn4eCheCl4W54yoTurEGBqbVy9iUu1BeN3sc4KmFtAaY8PpvJab4SJnzSwTrrPyq/SZPCMP0jhYfnmFu3YyMFAfF2U3qzuvuJ4HZ20U2dCcCZLbGQxUfFO4tiUkt9fMeORL3G4sas3ENRni6Iq8vLx1auzSaI2XYXEWL0hA2OoeC6V79z/tTfolvY8xKSIatIsMc0GiC5gzDfxWgW1KekU15nFrkai//XPVumDLTprlUHkoI2M5GFm0IcImKzjg2ymMWSrnJCR/WBYNTF6j16DFpN9WLPKxHEOVDdSwS6/aRyc43+vjf5/041NxJoO25n root@web02 2、客户端创建认证目录
mkdir /root/.ssh 3、把公钥复制到服务端
vi /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD+xIvwrNgftG9mVbeTh+iTn4eCheCl4W54yoTurEGBqbVy9iUu1BeN3sc4KmFtAaY8PpvJab4SJnzSwTrrPyq/SZPCMP0jhYfnmFu3YyMFAfF2U3qzuvuJ4HZ20U2dCcCZLbGQxUfFO4tiUkt9fMeORL3G4sas3ENRni6Iq8vLx1auzSaI2XYXEWL0hA2OoeC6V79z/tTfolvY8xKSIatIsMc0GiC5gzDfxWgW1KekU15nFrkai//XPVumDLTprlUHkoI2M5GFm0IcImKzjg2ymMWSrnJCR/WBYNTF6j16DFpN9WLPKxHEOVDdSwS6/aRyc43+vjf5/041NxJoO25n root@web02 4、授权
chmod 700 /root/.ssh/
chmod 600 /root/.ssh/authorized_keys

生产场景案例


# 1、创建密钥
[root@m01 ~]# ssh-keygen # 2、分发公钥
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.7
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.8
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.31
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.41 # 3、在跳板机上编辑脚本
[root@m01 ~]# vi jump_server.sh
#!/bin/bash
web01="172.16.1.7"
web02="172.16.1.8"
nfs="172.16.1.31"
backup="172.16.1.41"
m01="172.16.1.61"
cat<EOF
+-------------------------+
| 1) web01 |
| 2) web02 |
| 3) nfs |
| 4) backup |
| h) help |
+-------------------------+
EOF
read -p 'Please input Number:' num
if [ $num -eq 1 ];then
ssh root@web01
elif [ $num -eq 2 ];then
ssh root@web02
elif [ $num -eq 3 ];then
ssh root@nfs
elif [ $num -eq 4 ];then
ssh root@backup
fi

ssh安全优化


[root@web01 ~]# vi /etc/ssh/sshd_config
Port 6666 # 变更SSH服务远程连接端口
PermitRootLogin no # 禁止root用户直接远程登录
PasswordAuthentication no # 禁止使用密码直接远程登录 # 这两个可以减少ssh的延迟尤其是在使用ansible的时候
UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟 # 在企业中需要优化的内容:
安全方面的优化:
ssh 端口
不允许root登陆
禁止使用密码登陆
性能方面的优化:
不使用dns反向解析
不使用gss的认证 systemctl restart sshd

expect免交互


[root@web01 ~]# yum -y install expect

[root@web01 ~]# vi expect.ext
#!/usr/bin/expect
set ip 10.0.0.31
set pass 1
set timeout 30
spawn ssh root@$ip
expect {
"(yes/no)" {send "yes\r"; exp_continue}
"password:" {send "$pass\r"}
}
expect "root@*" {send "df -h\r"}
expect "root@*" {send "exit\r"}
expect eof

sshpass免交互


[root@m01 ~]# yum -y install sshpass
[root@m01 ~]# sshpass -p 1 ssh -o stricthostkeychecking=no root@10.0.0.31
-p # 指定密码

ssh安全优化免密登陆的更多相关文章

  1. linux ssh利用公钥免密登陆

    1.安装检查ssh 如果没有ssh的话,需要安装 #yum  install -y openssh-server openssh-clients 2.生成秘钥 ssh-keygen -t rsa 执行 ...

  2. ssh公私钥免密登陆

    简介ssh Secure Shell(简写SSH) 为一项建立在应用层和传输层基础上的安全协议,专门为远程登录会话和其他网络服务提供安全性的协议. SSH安全机制分为两种,一种是基于口令的安全认证,一 ...

  3. macos ssh host配置及免密登陆

    windows下面有xshell 这样的可视化ssh管理工具 macos 下面使用终端做下简单配置,也非常方便,具体过程如下 生成秘钥 cd ~/.sshssh-keygen -t rsa 生成了私钥 ...

  4. SSH之免密登陆

    又来了,上头让小轩我在服务器中写一个Shell脚本,主要用来在机器B中定时备份机器A中的一些文件.那么,小轩是怎么想的呢? 在小轩的知识库里,现在有scp和ssh两个玩具.别的还真没有其他什么东西了. ...

  5. ssh的免密登陆

    想必大家都有使用ssh登陆的过程了,那么,怎么设置ssh免密登陆呢?下面有一些我的总结: 环境:服务器主.从 主服务器:192.168.1.1 从服务器:192.168.1.2 实现主服务器ssh登录 ...

  6. SSH免密登陆原理及实现

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.SSH简介 SSH(Secure Shell)是一种通信加密协议,加密算法包括:RSA.DSA等. RSA:非对称加密算法,其安全性基于极其困难 ...

  7. ssh免密登陆:sshpass -p [passwd] ssh -p [port] root@192.168.X.X

    正文: ssh免密登陆:sshpass -p [passwd] ssh -p [port] root@192.168.X.X

  8. expect 批量自动部署ssh 免密登陆

    [root@node2 ssh]# cat auto_ssh.sh #!/usr/bin/expect -f ########################################## #通 ...

  9. linux ssh免密登陆远程服务器

    10.170.1.18服务器免密登录到10.170.1.16服务器 首先登入一台linux服务器(10.170.1.18),此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成ke ...

随机推荐

  1. Dynamics CRM安装教程七:Claims-based认证-内部访问配置

    DFS安装配置好后就要开始配置CRM基于内部认证访问的配置,即使用HTTPS在CRM服务器进行访问的设置.在CRM服务器中找到Dynamic CRM部署管理器,开始菜单选择Dynamic CRM部署管 ...

  2. 2021年春软件工程"助教团队"成员介绍

    2021年春软件工程 助教团队 成员介绍 项目 内容 这个作业属于那个课程 2021春季学期软件工程(罗杰.任健) 这个作业的要求在哪里 团队介绍 姓名 照片 个人介绍 分工 刘Q 本团队的PM,和助 ...

  3. OO_Unit1_表达式求导总结

    OO_Unit1_表达式求导总结   OO的第一单元主要是围绕表达式求导这一问题布置了3个子任务,并在程序的鲁棒性与模型的复杂度上逐渐升级,从而帮助我们更好地提升面向对象的编程能力.事实也证明,通过这 ...

  4. 记一次metasploitable2内网渗透之512,513,514端口攻击

    512,513,514端口都是R服务: TCP端口512,513和514为著名的rlogin提供服务.在系统中被错误配置从而允许远程访问者从任何地方访问(标准的,rhosts + +). 默认端口:5 ...

  5. Leedcode算法专题训练(数组与矩阵)

    1. 把数组中的 0 移到末尾 283. Move Zeroes (Easy) Leetcode / 力扣 class Solution { public void moveZeroes(int[] ...

  6. CountDownLatch与CyclicBarrier的基本使用

    1 概述 CountDownLatch以及CyclicBarrier都是Java里面的同步工具之一,本文介绍了两者的基本原理以及基本使用方法. 2 CountDownLatch CountDownLa ...

  7. editorconfig、eslint、prettier三者的区别、介绍及使用

    每次搭建新项目都少不了这些工具,但时间一久就忘记了,下次搭新项目时又要四处查官方文档,因此特此记录,主要内容是对这三个工具的理解,以及具体使用方式 editorconfig 理解 先看官网的定义: E ...

  8. Weekly Contest 184

    1408. String Matching in an Array Given an array of string words. Return all strings in words which ...

  9. 『动善时』JMeter基础 — 2、JMeter的安装和启动

    1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...

  10. 【目录】python全栈工程师

    第一阶段:Python 语言核心编程1. Python核心   -- 2048 游戏核心算法2. 面向对象   -- 天龙八部游戏技能系统3. Python高级   -- 集成操作框架项目:2048游 ...