一、ssh的概念
SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后再进行数据传输。确保了数据传输安全。
1. SSH服务主要功能:
(1).提供远程连接服务器的服务
linux远程连接协议:ssh 22 telnet 23
windows远程连接协议:RDP(remote desktop)3389
(2).对传输进行加密
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
3.ssh服务命令使用
[root@web01 ~]# ssh -p 22 root@10.0.0.31 ssh #命令 -p #指定端口(在终端无法使用) 22 #指定ssh协议端口 root #连接时使用的用户(如果不写用户,默认使用当前服务器当前用户) @ #分隔符 10.0.0.31 #远端服务器IP -o StrictHostKeyChecking=no #登录时跳过验证身份
二、ssh远程登录实战
1:基于账户密码的方式远程登录
#需要知道服务器的IP,端口,账户,密码,才可以通过ssh客户端连接远程主机
[root@web01 ~]# ssh -p 22 root@172.16.1.31 root@172.16.1.31's password: Last login: Tue Feb 18 11:01:54 2020 from 10.0.0.7 [root@nfs ~]#
#企业ssh服务密码设置要求
1.复杂的密码:yonghu_12@31_sysnum(记不住)
2.简单的密码:123(容易被破解)
3.每台服务器密码不一样
4.密码三个月更换一次
5.输入密码错误三次自动锁死
6.密码有key,30秒一变或者1分钟一变
2:基于秘钥的方式远程登录
默认情况下,通过ssh客户端命令登陆远程服务器,需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。
大概的意思就是跳板机相当于一个管理机,在管理机上向每个服务器或者客户端发放一个锁,这个锁都是一模一样的,然后管理机有这个锁的钥匙,客户端或服务器上配置锁,就可以实现在管理机上用秘钥方式登录每个服务器或客户端了。
1.在跳板机上生成秘钥对
生成的秘钥对在当前用户家目录下面的.ssh目录下id_rsa文件和id_rsa.pub文件
[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:iULhx6BId6WORBUU6Y4o4naeb9Rm7hC9PmbWAloZ05M root@m01 The key's randomart image is: +---[RSA 2048]----+ | . o=*=. | |..oo.=. | |. ..+.+ . | | ..o=.E . | | ..+o*.S | |o. . B.+. | |+ +.=.. | | o o..oB . | |. ooo.=oo | +----[SHA256]-----+ [root@m01 ~]#
2.服务器建立锁
(1).公钥内容就是跳板机生成秘钥的id_rsa.pub文件里的内容,首先在家目录创建.ssh目录并赋予700权限,然后在.ssh目录下创建authorized_keys文件并赋予600权限,之后再将跳板机生成秘钥的id_rsa.pub文件里的内容复制到authorized_keys文件里。
authorized_keys文件就相当于一把锁。
[root@web01 ~]# mkdir .ssh/ [root@web01 ~]# vim .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvokaPfSni0HC+tppFKrKuYrSH41D1Y35Qi3cfJm7Yl7jtnhN/E2bHaRxlx4Sff+ueLhS4IiewPwdywg/iG77HA8TIPBgnoW62PecNeuDn322KDo3qTzBMjmXIY6AT4D2sDpEjhhN7JmeQ/uSKaGAQQUMcnW2YRPwgaFCZEGR5XjeD7BQAGxBYsx6TjFKOn55WfKBFHLQSO3jXv+2y1yil0s3hK7iBhiCCMRc34oBgMh1aMZQekUf8CgUlSwtR3RdgKzKP68L5R/ggmZzGYZ5UOstJd0Vw1I14kZEaBHIF734tdNYbEcv8CXFku1iQzKrwkIs4FX7k3TxogI4XcE+/ root@m01 [root@web01 ~]# chmod 700 .ssh/ [root@web01 ~]# chmod 600 .ssh/authorized_keys
或者直接用下面的ssh推送的方法把秘钥推送过去
(2).命令推送公钥(与上面的方法二选其一)
[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:UPOOIxMjGD7QyAGVJAVNX+3Jf65ef33D1aDmML1DBcY. ECDSA key fingerprint is MD5:5d:7d:49:94:1d:a3:9c:2f:3c:66:db:64:3d:26:ea:90. 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. [root@m01 ~]# [root@m01 ~]# ssh 172.16.1.31 Last login: Tue Feb 18 12:14:27 2020 from 172.16.1.7
三、SSH安全优化
SSH作为远程连接服务,通常我们需要考虑到服务的安全,所以需要对服务进行安全方面的配置。
1、更改远程登陆的端口
2、禁止root管理员直接登录
3、密码认证方式改为秘钥认证
4、重要服务不适用公网IP地址
5、使用防火墙限制来源IP地址
[root@web01 ~]# vim /etc/ssh/sshd_config Port 4399 # 修改sshd服务的默认端口 PermitRootLogin no # 禁止使用root登录服务器 PasswordAuthentication no # 禁止使用密码登录 UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数 GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟
四、SSH服务相关命令
SSH有客户端与服务端,我们将这种模式称为C|S架构,ssh客户端支持Windows、Linux、Mac等平台。在ssh客户端中包含 ssh|slogin远程登陆、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。
1.scp命令(远程文件传输)
scp客户端命令:远程拷贝
scp类似于rsync命令,但scp传输命令是全量,而rsync传输是增量
scp支持推和拉
#推:将本地的/etc目录推送到backup服务器的/tmp目录下
[root@nfs ~]# scp -r /etc/ root@172.16.1.41:/tmp/
#将本地的/etc目录下的文件推送到backup服务器的/tmp目录下
[root@nfs ~]# scp -r /etc/* root@172.16.1.41:/tmp/
#拉:将远端172.16.1.41服务器的/etc目录拉取到本地的/tmp目录下
[root@nfs ~]# scp -r root@172.16.1.41:/etc /tmp/
-P ——- 指定端口,默认是22
-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
[root@nfs tmp]# scp -l 81920 file root@172.16.1.41:/backup/
2.sftp命令
[root@web01 ~]# sftp root@10.0.0.31 #文件传输命令 sftp> ls #查看连接后服务器 sftp> lls #查看本地服务器 sftp> get 1_nfs.gif ./ #格式:下载命令 远程服务器文件 本地服务器位置 sftp> put /data/1_nfs.gif /tmp/ #格式:上传命令 本地服务器文件 远程服务器位置
sftp和rz命令的区别:
sftp:
1.能上传文件夹
2.能支持断点续传
3.支持上传大于4G的文件
rz:
1.不能上传文件夹
2.不支持断点续传
3.只能上传小于4G的文件