ssh协议
1. ssh的基本用法
## 连接远程登录
ssh [选项] [用户名@]主机名或IP
例:m01连接172.16.1.41的root用户
[root@m01 ~]# ssh root@172.16.1.41 -p 22
ssh的端口是22 -p :指定端口
#远程执行命令
在172.16.1.41上面执行ls命令
[root@nfs ~]# ssh root@172.16.1.41 ls
# 以上两种都需要知道密码
2. ssh的免密登录
##1. ssh-keygen命令
ssh-keygen命令是用来产生一对公共/私人身份验证密钥的。这对身份验证密钥允许一个用户在不提供密码的情况下连接到一个远程系统上。每个用户必须单独地产生密钥。
选项 -t :指定所创建密钥的类型,在第一版的协议中可能的值是rsa1,而在第二版的协议中可能的值为dsa,ecdsa或rsa
# 执行ssh-keygen命令
[root@m01 ~]# ssh-keygen
ssh-keygen命令会在~/.ssh目录(用户的家目录中的.ssh目录)中生成id_rsa和id_rsa.pub两个密钥文件
# 将密钥文件id_rsa.pub复制到远程ip的服务器实现免密登录
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.31
ssh-copy-id 命令加-i 选项将m01的id_rsa.pub密钥发送到172.16.1.31,这样以后就可以免密登录了
# ssh 免密登录
[root@m01 ~]# ssh root@172.16.1.41
Last login: Mon May 11 16:23:35 2020 from 172.16.1.61
[root@backup ~]#
## 2.编辑配置文件放入跳板机密钥
# 创建/root/.ssh目录
[root@nfs ~]# mkdir /root/.ssh
# 目录授权700权限
[root@nfs ~]# chmod 700 /root/.ssh
# 编辑配置文件
[root@nfs ~]# vim /root/.ssh/authorized_keys
#查看配置文件内容有没有空行
[root@nfs ~]# cat -A /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWiiQkJhlODst3y4332otd0YwQSrIAmDq0opz5cRr1QNofvbgWBoK9D20opkAGu8Fqr5LzqoALjbX73x6trZgPhWh7i0RO2qYAjxiZe7bX4HppqjCO3KlP9BnNTa0Uc0LIgko5aE2ips9nHyQHVl8xvc1gvxDecs5/0o3e9IoiI4ttcjoKZ+mpPl0Ew6GgnVtdN94dE+opO9Sa9jBCVBGRgLbcigsUPFuwYmAhc/ONqZV1cwc9jHHw/ON6N3TVT9mSLP8pAOj9rciSliyH8refrEtQOV7axpg/l9iAGB3AKxbQp5bmSCzI5HE/h8hFaX5j8omOfTVvJvcfxQRG90vB root@m01$
# 授权配置文件600权限
[root@nfs ~]# chmod 600 /root/.ssh/authorized_keys
# 使用m01远程连接nfs服务器
[root@m01 .ssh]# ssh 172.16.1.31
Last login: Tue May 12 03:59:14 2020 from 10.0.0.1
抓包工具
## 下载网址
https://www.wireshark.org/download.html
# 使用telnet协议登录
telnet不能用root用户登录,必须使用普通用户
# 下载telnet
[root@web01 ~]# yum install -y telnet-server
# 启动服务
[root@web01 ~]# systemctl start telnet.socket
# 查看端口
[root@web01 ~]# netstat -lntup|grep 23
tcp6 0 0 :::23 :::* LISTEN 1/systemd # 创建普通用户
[root@web01 ~]# useradd wzh
# 给密码
[root@web01 ~]# passwd wzh
Changing password for user wzh.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
# 连接
# 打开wireshark,找到NAT8的网卡,输入telnet,然后鼠标右键追踪流
ssh生产场景案例
写脚本跳板机连接其他服务器
# 此处复制粘贴曾老师文档脚本内容
lb02=172.16.1.6
web01=172.16.1.7
web02=172.16.1.8
web03=172.16.1.9
nfs=172.16.1.31
backup=172.16.1.41
db01=172.16.1.51
m01=172.16.1.61
zabbix=172.16.1.71
cat <<EOF
+-------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs |
| 7) backup |
| 8) db01 |
| 9) m01 |
| 10) zabbix |
| h) help |
+-------------------------+
EOF
read -p ‘Please Input Number: ‘ num
if [ $num -eq 1 ];then
ssh root@$lb01
elif [ $num -eq 2 ];then
ssh root@$lb02
elif [ $num -eq 3 ];then
ssh root@$web01
elif [ $num -eq 4 ];then
ssh root@$web02
elif [ $num -eq 5 ];then
ssh root@$web03
fi
-
m01 10.0.0.61 克隆m01
- 在m01上免密连接其他所有机器
3.尝试写一个跳板机的脚本
- 在m01上免密连接其他所有机器
1.1 克隆m01 , 外网ip :10.0.0.61 内网ip :172.16.1.61
# 1.打开优化好的专门用来做克隆机器的模板机
# 2.右键管理-克隆-下一步-从优化好的快照-创建连接克隆-虚拟机名称-存放虚拟机的目录-完成
# 3.点击运行虚拟机-输入用户身份-密码-sh运行host_ip脚本-输入61-回车-m01-回车
#脚本内容
#!/bin/bash
old_ip=`hostname -I|awk -F ‘[. ]+‘ ‘{print $4}‘`
read -p ‘Please Input Your New IP: ‘ new_ip
read -p ‘Please Input Your New HostName: ‘ new_h
sed -i "s#$old_ip#$new_ip#g" /etc/sysconfig/network-scripts/ifcfg-eth{0,1}
hostnamectl set-hostname $new_h
systemctl restart network
2.1在m01上免密连接其他机器
# m01连接xshell,之后输入ssh-keygen获取密钥
[root@backup ~]# 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:
SHA256:/EqWyYEHa6Hopk1k3UwCb1wP11iM6nRev6SPGy+uvTU root@backup
The key‘s randomart image is:
+---[RSA 2048]----+
| . o .*. |
| + . +o o |
| = +.. |
| + *o*. . |
| + oo*oS. . |
| + ..o.= o |
| + * ooE. |
| = o oo=.. |
|. . oo*=o |
+----[SHA256]-----+
#使用ssh-copy-id 命令把密钥传送给其他服务器
[root@m01 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.8
# 连接
[root@m01 .ssh]# ssh 172.16.1.8
Last login: Tue May 12 04:02:29 2020 from 172.16.1.61
[root@web02 ~]#
# 连接其他服务器和上面命令相同,改一下后面的ip即可
3.1尝试写一个跳板机的脚本
# 复制曾老师文档
lb02=172.16.1.6
web01=172.16.1.7
web02=172.16.1.8
web03=172.16.1.9
nfs=172.16.1.31
backup=172.16.1.41
db01=172.16.1.51
m01=172.16.1.61
zabbix=172.16.1.71
cat <<EOF
+-------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs |
| 7) backup |
| 8) db01 |
| 9) m01 |
| 10) zabbix |
| h) help |
+-------------------------+
EOF
read -p ‘Please Input Number: ‘ num
if [ $num -eq 1 ];then
ssh root@$lb01
elif [ $num -eq 2 ];then
ssh root@$lb02
elif [ $num -eq 3 ];then
ssh root@$web01
elif [ $num -eq 4 ];then
ssh root@$web02
elif [ $num -eq 5 ];then
ssh root@$web03
fi
ssh基础优化
## 修改配置文件
[root@m01 ~]# vim /etc/ssh/sshd_onfig
1.1 修改端口
端口范围1-65535,但是不能占用常用端口,建议修改为五位数的端口
Port 55566
1.2 不允许root用户登录
PermitRootLogin no
1.3 禁止密码登录
PasswordAuthentication no
1.4 不使用DNS反向解析
UseDNS no
1.5 不使用GSSAPI认证
GSSAPIAuthentication no
# 名词
反向解析:把IP解析成域名叫做反向解析,正向解析把域名解析成IP
# 改完之后重启服务
[root@m01 ~]# systemctl restart sshd
## 免交互
1.1 下载安装包
[root@nfs ~]# yum install -y expect
# 编辑脚本代替手敲,脚本复制曾老师文档
#!/usr/bin/expect
set ip 10.0.0.51
set pass 123456
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
# 下载安装包
[root@nfs ~]# yum install -y sshpass
#连接 -p:定密码。sricthostkeychecking=no:取消认证
sshpass -p 1 ssh -o stricthostkeychecking=no root@10.0.0.41
#写脚本批量免密连接
[root@nfs ~]# vim mianmi.sh
#!/bin/bash
for ip in 31 41 7 8 61 ;do
sshpass -p 1 ssh-copy-id -i ~/.ssh/id_rsa.pub -o stricthostkeychecking=no root@172.16.1.$ip
done