SSH远程管理服务实战
SSH基本概述
SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。那SSH服务主要功能有哪些呢?
1.提供远程连接服务器的服务
2.对传输的数据进行加密
那么除了SSH协议能提供远程连接服务,Telnet也能提供远程连接服务, 那么分别的区别是什么呢?
ssh服务会对传输数据进行加密, 监听在本地22/tcp端口, ssh服务默认支持root用户登录
telnet服务不对数据进行加密, 监听在本地23/tcp端口, Telnet默认不支持root用户登录
为什么不要telnet连接呢?
1 2 3 telnet也可以远程连接,为什么不要telnet连接呢? 1、刚安装完成的系统没有telnet的服务端,只有ssh的服务端,想要使用telnet远程,需要安装 2、telnet是明文传输,不安全 端口是23端口
服务连接方式
服务数据传输
服务监听端口
服务登陆用户
ssh
加密
22/tcp
默认支持root用户登陆
telnet
明文
23/tcp
不支持root用户登陆
写出以下协议端口
1 2 3 4 5 6 7 8 9 10 11 ftp:21 dns:53 ssh:22 telnet:23 mysql:3306 http:80 http:443 rsync:873 pop3收邮件协议:110 smtp邮箱协议端口:25 rdp远程连接windows:3389
SSH相关命令
ssh命令一般都是建立远程连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 远程连接的底层就是调用ssh这个命令 ssh -p 22 root@172.16.1.13 -p :指定端口,默认22端口这个选项就可以省略 @:分隔符,分割用户和ip 172.16.1.13 : 可以输入ip或者域名 远程输入执行命令 1、在第一次建立连接时会进行指纹认证,让输入yes , 2、只要没有做免密的情况下,连接自己也需要输入密码 [root@backup ~]# ssh root@10.0.0.7 "ifconfig" [root@backup ~]# ssh root@10.0.0.7 "ls /root" root@10.0.0.7's password: anaconda-ks.cfg jichu1.sh jichu.sh sh [root@backup ~]# ssh -o strictHostKeyChecking=no root@10.0.0.7 "ifconfig" -o strictHostKeyChecking=no:忽略指纹认证,直接输入密码 # scp 远程拷贝 scp -r /etc root@10.0.0.7:/tmp -r:递归,传输目录 -p(小写):保持文件属性,传递过去etc目录下的文件属性不变 -P(大写):指定端口 如果ssh的端口变了 就要加入端口的选项 -P scp -P 2222 -rp /etc root@10.0.0.7:/tmp #scp远程拉取文件 scp 10.0.0.31:/backup /tmp
学ssh协议需要一台新的机器
1 2 3 4 5 6 7 8 机器巡检,每台机器一个脚本,发邮件给领导,如果100个服务器 那邮件都满了,一般巡检都是由一个机器完成 [root@backup ~]# ssh root@10.0.0.7 "idf -Th" 可以写一个脚本,就放到web01,执行远程执行的命令 ssh root@10.0.0.7 "idf -Th" ssh root@10.0.0.8 "idf -Th" ssh root@10.0.0.31 "idf -Th" 但是要输入密码,没有写入密码的变量,需要做ssh免密验证
SSH免密连接方式
默认情况下,通过ssh 客户端命令登陆远程服务器,需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。
SSH免密连接方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 1、必须要生成一对密钥对,才能免密连接别人 公钥:门锁 私钥:钥匙 m01(10.0.0.61),做管理的机器,以后放巡检脚本用的 [root@m01 ~]# ssh-keygen Enter file in which to save the key (/root/.ssh/id_rsa): // 密钥对存放路径 Your identification has been saved in /root/.ssh/id_rsa. // 私钥 Your public key has been saved in /root/.ssh/id_rsa.pub. // 公钥 [root@m01 ~]# ll ~/.ssh/ -rw------- 1 root root 1675 May 17 11:49 id_rsa // 私钥:钥匙 -rw-r--r-- 1 root root 390 May 17 11:49 id_rsa.pub // 公钥:锁 [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7 [root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.8 [root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.31 [root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.41 ------------------------------------ 1)远程创建.ssh目录 免密跳板机 [root@m01 ~]# ssh root@10.0.0.8 'mkdir /root/.ssh' 2)将公钥保存到需要免密控制的机器 [root@web02 ~]# vim /root/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXrmYzl1/VAkM6pcAkjwuPzHzzhWKroscKwnGlsWLffgEe/WZT 2mqQqfygUNQmhZF3BLySTRlI/vVZKoLgqKBGr6CbRXPWi1ETKCYpbkK8NCj97wO3SV6Q01GU1sIcFAFV pXl5O+BapM/tLJVC+5EJqtK+2O1am3PC2/OPxQJJXCYWg9GH4VZhTUK4jQISJX9YRMcY8/HFjhQkgHEA /O6bFzeEFcfOodVfUKO2cauBLJTNw5UIRvsBX9cH10478pN3+QaZCTab2d43bfGW2A8b/tVXfumCF253 eBrPCA8mt1nAH+YRpPLRS4FovbqQpfFHn/fVR1WLDo5IYIUhbcPP root@m01 ssh-keygen 3个回车 会输出一个ll -a ~/.ssh目录,里面有公钥和私钥文件 我想免密连接哪个机器,我就要把公钥发给谁 只有用ssh连接过别人,自己家目录下就会生成一个.ssh的目录,下次连接就不要输入yes 了 fingerprint 指纹认证 在.ssh目录下的known_hosts 2、免密连接 把锁发给需要连接的人 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.7 -i 指定锁的路径 ssh-copy-id底层原理 会先创建一个 .ssh目录 有这种免密连接的方式,写脚本就容易了,
免密跳板机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 lb01=10.0.0.5 lb02=10.0.0.6 web01=10.0.0.7 web02=10.0.0.8 web03=10.0.0.9 nfs=10.0.0.31 backup=10.0.0.41 db01=10.0.0.51 m01=10.0.0.61 zabbix=10.0.0.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 } trap "" HUP INT TSTPwhile true do read -p "请输入要连接的主机编号:" numcase $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