SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后再进行数据传输。确保了数据传输安全。那SSH服务主要功能有哪些呢? 1.提供远程连接服务器的服务 linux远程连接协议:ssh 22 telnet 23 windows远程连接协议:RDP(remote desktop) 3389 2.对传输进行加密
面试题:请说明下列服务都是哪些端口? ssh 22 telnet 23 http 80 https 443 ftp 20 21(一个上传,一个下载) RDP 3389 mysql 3306 dns 53 zabbix 10051 10050 elasticsearch 9200 9300 pop3 110 rpcbind 111 rsync 873 redis 6379
# 1.安装telnet [root@nfs ~]# yum install -y telnet-server # 2.启动telnet [root@nfs ~]# systemctl start telnet.socket # telnet不支持root用户,只支持普通用户 # 3.创建普通用户 [root@nfs ~]# useradd lhd [root@nfs ~]# echo 123 | passwd --stdin lhd # 设置密码 # 4.验证登录 telnet 10.0.0.31 23 # 或者使用xshell的telnet连接方式连接
telnet: 1.不支持root直接登录,只能用普通用户 2.数据传递是明文的 ssh: 1.支持root直接登录 2.所有数据传递都是加密的
scp客户端命令:远程拷贝 scp类似rsync scp全量 rsync增量 # scp支持推和拉 # 推: 将本地的/data目录推送到backup服务器的/tmp目录下 [root@nfs ~]# scp -r /data/ root@172.16.1.41:/tmp/ # 推: 将本地的/data目录下的文件推送到backup服务器的/tmp目录下 [root@nfs ~]# scp -r /data/* root@172.16.1.41:/tmp/ # 拉: 将远端172.16.1.41服务器的/data目录拉取到本地的/tmp目录下 [root@nfs tmp]# scp -r root@172.16.1.41:/data /tmp/ -P 指定端口,默认是22 (基于ssh协议) -p 保持传输文件属性不变 -r 表示递归拷贝目录 -l 限速 # -l 限速 单位是 kb [root@nfs tmp]# scp file root@172.16.1.41:/backup/ root@172.16.1.41's password: file 46% 234MB 14.5MB/s 00:18 # 设置速度为10M 10*1024*8=81920(换算成kb) [root@nfs tmp]# scp -l 81920 file root@172.16.1.41:/backup/
基于SSH协议,默认端口22 # 文件传输命令 [root@web01 ~]# sftp root@10.0.0.31 # 查看连接后服务器 sftp> ls # 查看本地服务器 sftp> lls #命令 远端服务器文件 本地服务器位置 sftp> get 1_nfs.gif ./ #命令 本地服务器文件 远程服务器位置 sftp> put /data/1_nfs.gif /tmp/ # 图形界面: Xftp FileZilla FlashFXP sftp: 1.能上传文件夹 2.能支持断点续传 3.支持上传大于4G的文件 rz: 1.不能上传文件夹 2.不支持断点续传 3.只能上传小于4G的文件
#需要知道服务器的IP,端口,账户,密码,才可以通过ssh客户端连接远程主机 [root@web01 ~]# ssh -p 22 root@172.16.1.31 # 一般企业里端口不会用22 # 密码设置条件 1.复杂的密码: yonghu_id_ip_sysnum(类似这种记不住) 2.简单的密码: 容易被破解 3.每台服务器密码不一样 4.密码三个月更换一次 5.输入密码错误三次自动锁死 6.密码有key,30秒一变或者1分钟一变
默认情况下,通过ssh客户端命令登录远程服务器,需要提供远程系统上的账号与密码,但为了降低密码泄露的几率和提高登录的方便性,建议使用秘钥验证方式。
-t 指定秘钥类型 rsa dsa -C 指定用户邮箱 [root@m01 ~]# ssh-keygen # 一直回车即可(windows上也是可以生成密钥对的) 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:JOpKBOMhaCCJzjpctZcopaHwaMMfqIBJSMAmlvkRVsw root@m01 The key's randomart image is: +---[RSA 2048]----+ |Xooo=. | |XB.o E | |/*+ * + o | |O@o* + = | |*.= + . S | |+o o | | .. . | | . . | | . | +----[SHA256]-----+ [root@m01 ~]#
# 方式一:手动复制公钥 m01管理机操作 [root@m01 .ssh]# cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqI3wyeRp47NiTEdO61r1WfaVr/bKESf70q52lLYZ1p00TAF9uTW4FMNloR8mLWJ720djQwUs4TWA5w4oy91aD0p+jwVyIf1PEq9VX+5UX5rsl2e4eLsyclPm+SIyfMtvWJqLw8PTJsS9HR41n1LpF7YhgmElnQPzraIVz7l9oxSrWyzCn6/NjM/PSVuqxrdeIv7Q8Jd18PB9yVXBA+2XMGV1u5cnxqdHlnweteVbywv5UhWsuEZtV4XzEs1KRPbkrALErYF/NEWSfDdGqLK4/4i9Rec28XQb+q5ggu24+DQDkkSh/CgqRxq2gvs5PNXlM2RR4K3QJOg7D2ZxLsHAh root@m01 # 把公钥复制到要连接的服务器web01 web01服务器操作 # 到web01下看是否有.ssh文件夹,没有就创建并赋权700 [root@web01 ~]# mkdir .ssh/ [root@web01 ~]# chmod 700 .ssh # 如果.ssh是手动创建的,要给700权限 [root@web01 ~]# vim .ssh/authorized_keys # 注意:保证写入的是一行内容 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqI3wyeRp47NiTEdO61r1WfaVr/bKESf70q52lLYZ1p00TAF9uTW4FMNloR8mLWJ720djQwUs4TWA5w4oy91aD0p+jwVyIf1PEq9VX+5UX5rsl2e4eLsyclPm+SIyfMtvWJqLw8PTJsS9HR41n1LpF7YhgmElnQPzraIVz7l9oxSrWyzCn6/NjM/PSVuqxrdeIv7Q8Jd18PB9yVXBA+2XMGV1u5cnxqdHlnweteVbywv5UhWsuEZtV4XzEs1KRPbkrALErYF/NEWSfDdGqLK4/4i9Rec28XQb+q5ggu24+DQDkkSh/CgqRxq2gvs5PNXlM2RR4K3QJOg7D2ZxLsHAh root@m01 # 授权 [root@web01 ~]# chmod 600 .ssh/authorized_keys # m01即可免密登录。注意: 必须授权,不授权就无法免密登录
# 方式二:命令推送公钥 [root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.31 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub" The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established. ECDSA key fingerprint is SHA256:2SQdzwgUOhQNWwPZEZSV9NaJ2i3tS2GgUaCazKOyOew. ECDSA key fingerprint is MD5:24:68:a9:38:f3:00:b4:7b:8a:72:0f:2a:c9:77:82:e0. Are you sure you want to continue connecting (yes/no)? yes /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@172.16.1.31's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@172.16.1.31'" and check to make sure that only the key(s) you wanted were added. # m01即可免密登录。注意: 该方式推送,对方服务器.ssh和authorized_keys已赋权 [root@nfs ~]# [root@m01 ~]# ssh 172.16.1.31 # 免密登录 Last login: Fri Jul 21 23:49:07 2023 from 10.0.0.1
[root@m01 ~]# vim xunjian.sh -------------------------- #!/bin/bash [ $# -ne 1 ] && echo "请输入执行的命令" && exit 1 for i in 31 41 7 do echo "#####172.16.1.$i#####" ssh root@172.16.1.$i "$1" done -------------------------- [root@m01 ~]# sh xunjian.sh "df -h"
实践场景,用户通过windows/MAC/Linux客户端连接跳板机免密码登录,跳板机连接后端无外网的Linux主机实现免密登录,架构图如下。
实践多用户登录一台服务器无密码
实践单用户登录多台服务器免密码
windows下的powershell也可以,这里展示xshell的制作过程
确定(不用管密码是空的)
获取公钥,可以复制,也可以导出成文件
# 在m01管理机上,创建公钥(和上方一样,没有.ssh文件夹就创建并赋权) [root@nfs .ssh]# vim authorized_keys [root@nfs .ssh]# chmod 600 authorized_keys
xshell通过秘钥的方式连接跳板机