19 SSH协议

ssh远程管理服务

ssh协议是一个安全协议,在数据传输时,会对数据包进行处理,为了确保数据安全,ssh服务的主要功能:
1、提供远程连接服务器的服务
	linux远程:ssh	端口22
	windows	rdp协议	端口3389
2、对传输的数据进行加密

telnet

#安装
[root@aliyun ~]# yum install telnet-server

#启动
systemctl start telnet.socket

#注意:
1、telenet只能是普通用户连接,不可以是root
2、ssh支持root用户登录
3、telnet数据传输过程是明文的,ssh数据传输是加密的

SSH相关的命令

属于c/s架构,ssh客户端支持windows。Linux。mac等平台

#语法
ssh [用户]@[IP] 
yes(首次连接)
#如果连接时不指定用户,则默认当前的用户

#参数
-p #指定端口
22 #端口
-o StrictHostKeyChecking=no	#首次连接不询问(还是输yes吧,兄弟)

#x-shell连接不上服务器怎么办
1、查网络
ping [服务器IP]

2、查看网卡 ip a/ifconfig

3、查端口
telnet ip 22端口

4、检查sshd服务是否启动

5、防火墙

SSH验证方式

基于账户密码远程登录

知道服务器的端口,用户,密码,即可通过ssh客户端命令去连接

#设置密码
1、如果太难,会记不住
2、如果太简单,容易被破解
3、每台服务器的密码不一样
4、密码是动态的
5、密码三个月修改一次
6、密码错误三次锁定用户
7、密码是没有规律的

基于密钥远程登录

#1、生成密钥对
[root@test1 ~]# 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:a9px1MJdpoWw8xfk7xmEyVIJFJ4oqFvTEUbV/nUogSs root@test1
The key's randomart image is:
+---[RSA 2048]----+
|      .+..+=o.o  |
|      o . ++==o  |
|     . o .+=.=*o |
|    . . E..*o=o+.|
|   . o .S.+ *.o.o|
|    o .  o . o .o|
|   .    + .    ..|
|       + o       |
|      . .        |
+----[SHA256]-----+
#将公钥发送到免密登录的服务器(长的)
[root@test1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.15.102
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.15.102's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.15.102'"
and check to make sure that only the key(s) you wanted were added.
#测试连接
[root@test1 ~]# ssh 192.168.15.102
Last login: Tue Mar 30 20:32:22 2021 from 192.168.15.1
[root@web1 ~]# 

powershell与跳板机连接

1、在powershell下执行ssh-keygen
2、在windows下找到公钥(参考返回的路径)
3、将公钥内容复制到跳板机上,并授权
[root@test1 ~]# vim .ssh/authorized_keys
[root@test1 ~]# chmod -R 600 .ssh/authorized_keys 
4、自行测试(这里ip前要加root)
ssh root@[ip]

xshell免密登录跳板机

1、打开xshell找工具栏中的	工具/新建密钥生成向导/
2、选择加密文件类型和位数,下一步
3、生成密钥对成功,下一步(名字写的有点针对性)
4、给密钥配置信息、名字、密码...
5、属性/公钥/
6、复制公钥内容到跳板机上
[root@test1 ~]# mkdir .ssh
[root@test1 ~]# chmod 700 .ssh  #密码文件夹授权700
[root@test1 ~]# cd .ssh/
[root@test1 ~]# cat >authorized_keys<<EOF
[root@test1 ~]# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABANnz3WrIVjC3rqriyL1U4WnV3UtJZoedoOnSPrA04MDiEEUCq38igG4Uwf
[root@test1 ~]# chmod 600 authorized_keys  #密码文件授权600

自行测试

#方法二
在新机上创建新用户,推送给新用户的家目录下,稳定,不易出错
ssh-copy-id -i ~/.ssh/id_rsa.pub jump@192.168.15.41

跳板机模板(加入环境变量开机自启动)

#!/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          |
        |     c) clear            |
        +-------------------------+
EOF
}

#连接函数
connect(){
  ping -c 1 -w 1 $1 &>/dev/null
  if [ $? -eq 0 ];then
    ssh jump@$1
  else
    echo -e "33[1;35;40m 别连了,我的哥,$2:$1机都没开连你妈!!!33[0m"
  fi
}

#控制不让输入ctrl+c,z
trap "" HUP INT TSTP
while true
do
    menu
    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
                    ;;
            c|clear)
                    clear
                    ;;
            爸爸)
                    break
                    ;;
    esac
done

SSH安全优化

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。
#更改配置 vim /etc/ssh/sshd_config
1.更改远程连接登陆的端口
Port xxx

2.禁止ROOT管理员直接登录
PermitRootLogin no
#注意:如果不想你的服务器与世隔绝,请验证是否有其余用户,其余用户是否有秘钥,这一点很重要!

3.密码认证方式改为密钥认证
PasswordAuthentication no

4.重要服务不使用公网IP地址
5.使用防火墙限制来源IP地址

6.关闭反向解析,开启会影响效率
UseDNS no

#注意:修改完成后记得重新启动sshd让他生效哦!

scp

类似于rsync,远程拷贝,scp是全量,rsync是增量

scp推:
#文件
scp [文件] root@[ip]:/tmp/
#如果不指定用户的话,默认是root

#目录
scp -r /etc root@[ip]:/tmp/
#注意:
1、与rsync不同,推送时不加/或者不加,推的都是目录
2、如果想要推送目录下的文件,用/*
scp拉:
#scp root@[ip]:/tmp/* ./
#注意:
1、与rsync不同,拉取时不加/或者不加,推的都是目录
2、如果想要拉取目录下的文件,用/*

参数

-r 递归
-P 指定端口,默认22
-p 表示在拷贝文件时保持文件或目录属性不变
-l 显示传输使用的带宽(默认是KB)

总结

1、scp通过ssh协议加密方式进行文件或者目录的拷贝
2、scp连接时的用户作为拷贝文件或目录的权限
3、scp支持数据推送和拉取,每次都是全量拷贝,效率较低

sftp

终端连接服务器推送

1、连接终端
sftp [ip] 

2、下载
get [文件]

3、上传
put 选择文件

服务器之间连接用ftp

1、连接终端
sftp [ip] 

2、操作本机,在目录前面加l,不加默认操作远程

3、下载
get [文件] /opt #在linux下可以指定目录拉取

4、上传
put 选择文件

文件传输工具

1、xftp
2、filezilla
3、flashfxp

命令

sz/rz
	不能上传大于4G以上的文件
	不能断点续传
	不能上传文件夹
	
sftp(能不用就不用,贼鸡肋)
	能大于4G
	支持断点续传
	可以上传文件夹
原文地址:https://www.cnblogs.com/zhaokunhao/p/14602907.html