FTP、ssh、http、telnet、https
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP、ssh、http、telnet、https相关的知识,希望对你有一定的参考价值。
参考技术A FTP就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。默认端口21SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用
SSH 协议可以有效防止远程管理过程中的信息泄露问题。默认端口22
HTTP超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收html页面的方法。默认端口80
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。默认端口23
HTTPS,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。默认端口443
架构(day07)
SSH远程管理
远程连接
Linux:
- ssh 端口:22 加密传输数据
- telnet 端口:23 明文传输数据
Windows:
- rdp 端口:3389 remote desktop protocol
抓包演示
SSH数据加密传输
Telnet数据明文传输
企业面试题
## 写出下列服务或者协议的端口
ftp 21
ssh 22
telnet 23
dns 53
mysql 3306
http 80
https 443
rsync 873
ssh相关命令及选项
## 注意:不加用户@,默认使用当前登录的用户
ssh:远程连接Linux服务器
-p:port指定端口
## 不连接上服务器,直接执行命令
ssh root@10.0.0.41 ls /
scp:远程拷贝数据(写在前面的是源文件)
-r:递归(远程拷贝目录)
-p:拷贝的时候保持属性
-P:大写p指定port
推:scp sersync2.5.4 root@172.16.1.7:/root
拉:scp root@172.16.1.7:/root/sersync2.5.4 /opt
[root@backup ~]# scp -P 22 root@172.16.1.7:/root/sersync2.5.4.tar.gz .
# 结论:
1.scp通过ssh协议加密方式进行文件或目录拷贝。
2.scp连接时的用户作为为拷贝文件或目录的权限。(-p保持文件属性,-a)
3.scp支持数据推送和拉取,每次都是全量拷贝,效率较低。
ssh免密连接
验证方式:
- 用户名密码验证
- 密钥对验证方式
ssh密钥对认证流程
#### ssh-keygen:生成密钥对
[root@m01 ~]# ssh-keygen
Generating public/private rsa key pair.
## 将秘钥保存到文件中,可以指定其他路径(直接回车)
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:
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:3jXcLjP2VzFk55xY7lYGdohVQSSxxBJLDJE9MJIUWbU root@m01
The keys randomart image is:
+---[RSA 2048]----+
| .+=*O+o*=*o|
| o..o==.*+o|
| Eoo*=o|
| . o ==|
| S + o.+|
| . . . o o.|
| . . = o .|
| . = .|
| .. |
+----[SHA256]-----+
## 生成后的密钥对
[root@m01 ~]# ll /root/.ssh/
-rw------- 1 root root 1679 May 23 11:29 id_rsa
-rw-r--r-- 1 root root 390 May 23 11:29 id_rsa.pub
#### ssh-copy-id:发送公钥
-i:指定公钥位置
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
#### .ssh目录中的know_host作用
[root@m01 ~]# cat ~/.ssh/known_hosts
记录连接过的服务器,如果没有连接过(第一次连接),需要输入yes
#### 生成密钥对命令:ssh-keygen
1.在当前用户的家目录下创建了一个隐藏目录 .ssh mkdir ~/.ssh
2.将密钥对存放目录 .ssh 授权为 700 chmod 700 ~/.ssh
3.将公钥内容写入 ~/.ssh/id_rsa.pub 文件中
4.将私钥内容写入 ~/.ssh/id_rsa 文件中
5.将私钥文件授权为 600 chmod 600 ~/.ssh/id_rsa
#### 发送公钥:ssh-copy-id
[root@web01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.5
输入yes
输入密码:1
1.在远端的指定用户的家目录下创建了一个隐藏目录.ssh ssh root@172.16.1.5 mkdir ~/.ssh
2.将密钥对存放目录 .ssh 授权为 700 ssh root@172.16.1.5 chmod 700 ~/.ssh
3.先在远端~/.ssh目录下创建文件authorized_keys ssh root@172.16.1.5 touch
~/.ssh/authorized_keys
4.将authorized_keys文件授权为600 ssh root@172.16.1.5 chmod 600
~/.ssh/authorized_keys
5.将公钥内容,保存到authorized_keys文件中
ssh root@172.16.1.5 echo ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCgW5rliyT3oan+r4aXuOj0D0fLEFSGNJXZd5JMDYWX2pWhC5kITeVS66+EvXM
5OvqFfr40IQcMrZym0DXk7Zqf8brgWoqxR8AZR9tqAFwV3qTb9T/QB95OM16Y+N14oUOvWCzB9rQo54QU/INPgfhaRy
Sk4YOgv+oL2aXdD6qbIGAikPzayvh9hWFjvy/LeFUGLheYYlYTqVM7WgeNrTlmbpjG4QO/IYe/xWESbt20l70yTIrD/
XWSZ2lsxSWQf0KXERhshRGhNkJF87hhS2cJozOHjzhjaPjDvgycjpYajQWf4gERe3sTL9fji/bhf8bZ3dCLp4uK/e5P
6CRpgo9V root@web01 >> ~/.ssh/authorized_keys
免密使用场景
1.批量查看服务器信息
#!/bin/bash
[ $# -ne 1 ] && echo "请输入执行的命令" && exit 1
for i in 5 7 8 31 41
do
echo "#########172.16.1.$i#####"
ssh root@172.16.1.$i "$1"
done
2.跳板机
[root@m01 ~]# cat jump.sh
#!/bin/bash
#jumpserver
lb01=172.16.1.5
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
menu()
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
#菜单函数
menu
#连接函数
connect()
ping -c 1 -w 1 $1 &>/dev/null
if [ $? -eq 0 ];then
ssh root@$1
else
echo -e "\\033[5;4;40;31m 别连了,我的哥,$2:$1机器都没开!!!\\033[0m"
fi
#控制不让输入ctrl+c,z
trap "" HUP INT TSTP
while true
do
read -p "请输入要连接的主机编号:" num
case $num in
1|lb01)
connect $lb01 lb01
;;
2|lb02)
connect $lb02 lb02
;;
3|web01)
connect $web01 web01
;;
4|web02)
connect $web02 web02
;;
5|web03)
connect $web03 web03
;;
6|nfs)
connect $nfs nfs
;;
7|backup)
connect $backup backup
;;
8|db01)
connect $db01 db01
;;
9|m01)
connect $m01 m01
;;
10|zabbix)
connect $zabbix zabbix
;;
h|help)
clear
menu
;;
close)
break
;;
esac
done
SSH安全优化
## ssh配置文件
[root@m01 ~]# vim /etc/ssh/sshd_config
17 Port 52022 # 修改默认端口
115 UseDNS no # 关闭反向解析
38 PermitRootLogin no # 禁止root用户登录
65 PasswordAuthentication no # 禁止使用密码登录
79 GSSAPIAuthentication no # 关闭GSSAPI认证
## 将以下内容,直接复制到文件最后一行
Port 6666 # 变更SSH服务远程连接端口
PermitRootLogin no # 禁止root用户直接远程登录
PasswordAuthentication no # 禁止使用密码直接远程登录
UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟
## 重启服务
[root@m01 ~]# systemctl restart sshd
## 解决方案
如果已经优化完ssh,发现服务器上出现以下问题:
1.没有普通用户
useradd zls(无法创建,进入单用户模式)
2.windows上秘钥没有推送
1)在windows上生成密钥对
- 使用windows的命令行执行 ssh-keygen
- 使用Xshell
2)
使用Xshell生成密钥对
生成秘钥对
[wjh@m01 ~]$ mkdir .ssh
[wjh@m01 ~]$ chmod 700 .ssh/
[wjh@m01 ~]$ vim .ssh/authorized_keys
ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAQEAuNorYRb3u0gM8RvxeZqGZJjptceVYpZz3ADLzTpF92DZlmGjEScnbmEfZaIVhER
F0nTvd79aixEP97V2l/B7p30b4+oaFugCR0ZDJRmypZUIKXnNYwbDjwT7k/4/V3DTYjS+0OkNLbKghlDDX0ntOoClGb
y2zV87draCqOQ6F4AAHWcrZi72gflKEShRKULKOGjcr3ZzDZfyKH6IxWLxa3EJO3v/tUFOatqDDj2j+aNswgbEDf0iC
Ynaw5h+SiTkVV6zY44TEEM+h9aVXjY1ufyAAePRDcuOnHBB1VzE38TMLEYl94VEUartDwE2TMnVOk5MhRYm4Q09zrPj
VM0J3w==
[wjh@m01 ~]$ chmod 600 .ssh/authorized_keys
免交互生成密钥对
ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &>/dev/null
-t:指定加密类型
-P:空密码
-f:秘钥生成的位置
免交互推送公钥
## 不会循环的lowB写法
#!/bin/bash
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &>/dev/null
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.5
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
## 循环
#!/bin/bash
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &>/dev/null
for n in `cat /root/1.txt`;do
ssh-copy-id -i ~/.ssh/id_rsa.pub root@$n
done
1)使用expect解决
[root@m01 ~]# yum install -y expect
#!/usr/bin/expect
set ip 172.16.1.31
set pass 1
set timeout 30
spawn ssh-keygen
expect
"id_rsa):" send "\\r"; exp_continue
"passphrase):" send "\\r"; exp_continue
"again:" send "\\r"
expect eof
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub 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
2)使用sshpass解决
[root@m01 ~]# yum install -y sshpass
## ssh不需要输入yes的选项
[root@m01 ~]# ssh -o StrictHostKeyChecking no root@172.16.1.7
[root@m01 ~]# sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking no -i ~/.ssh/id_rsa.pub
root@172.16.1.8
[root@m01 ~]# cat send_public_key.sh
#!/bin/bash
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &>/dev/null
for n in `cat /root/1.txt`;do
shpass -p 1 ssh-copy-id -o StrictHostKeyChecking no -i ~/.ssh/id_rsa.pub root@$ip
done
[root@m01 ~]# cat /root/1.txt
172.16.1.31
172.16.1.41
172.16.1.5
172.16.1.7
172.16.1.8
## 密码不一致的情况
#!/bin/bash
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &>/dev/null
for n in `cat /root/1.txt`;do
pass=`echo $n|awk -F : print $2`
ip=`echo $n|awk -F : print $1`
sshpass -p $pass ssh-copy-id -o StrictHostKeyChecking no -i ~/.ssh/id_rsa.pub root@$ip
done
[root@m01 ~]# cat /root/1.txt
172.16.1.31:1
172.16.1.41:2
172.16.1.5:3
172.16.1.7:4
172.16.1.8:111
## 优化后的脚本
vim send_public_key.sh
#!/bin/bash
. /etc/init.d/functions
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &>/dev/null
for n in `cat /root/1.txt`;do
pass=`echo $n|awk -F : print $2`
ip=`echo $n|awk -F : print $1`
sshpass -p $pass ssh-copy-id -o StrictHostKeyChecking no -i ~/.ssh/id_rsa.pub root@$ip
&>/dev/null
if [ $? -eq 0 ];then
action "$ip send public key " /bin/true
else
action "$ip send public key " /bin/false
fi
done
## 优化后不使用判断的脚本
#!/bin/bash
. /etc/init.d/functions
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &>/dev/null
for n in `cat /root/1.txt`;do
pass=`echo $n|awk -F : print $2`
ip=`echo $n|awk -F : print $1`
sshpass -p $pass ssh-copy-id -o StrictHostKeyChecking no -i ~/.ssh/id_rsa.pub root@$ip
&>/dev/null && \\
action "$ip send public key " /bin/true || \\
action "$ip send public key " /bin/false
done
以上是关于FTP、ssh、http、telnet、https的主要内容,如果未能解决你的问题,请参考以下文章