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