中小规模架构

课堂笔记day37——SSH服务介绍与实践

2019-04-26  本文已影响0人  劉歓

1.SSH服务介绍

1.1 基本介绍

SSH服务是一种古老的基础服务,是一个远程连接Linux和管理Linux的服务。

Secure Shell Protocol 简写SSH,是一个安全的Shell协议,属于TCP/IP协议族。

SSH服务使用的默认端口为22(一台机器的不同功能就用端口区分)。

1.2网络服务对应的端口介绍:

21==>ftp

22==>ssh

23==>telnet

25==>smtp(邮件发送服务)

80==>web(网页服务)

111==>rpcbind

110==>pop3(邮件接收服务)

873==>rsync

3389==>windows远程桌面

2.远程连接服务:

telnet:数据传输是明文的,数据传输依靠交换机和路由器(需要事先配置交换机和路由器)。

telnet ip port命令可以检测端口以及服务是否是畅通的。

ssh协议:是一个安全的Shell协议,在传输过程中数据是加密的。

服务端和客户端称之为c/s架构==>client/server。例如:

超市收银就是用的c/s架构,这个客户端很强大,页面展示都可以在客户端。

游览器/服务器称之为b/s架构==>browser/server(未来互联网发展的大趋势)。例如:

网页服务就是用的b/s架构,内容显示都是服务端控制的。

3.ssh服务端软件介绍:

3.1 软件安装

#rpm查看如果没有的话yum install openssh openssl -y安装

[root@m01 ~]# rpm -qa openssh openssl

openssh-7.4p1-16.el7.x86_64

openssl-1.0.2k-16.el7.x86_64

[root@m01 ~]# ll /etc/ssh/sshd_config    #<==ssh服务配置文件

-rw-------. 1 root root 3907 4月 11 2018 /etc/ssh/sshd_config

[root@m01~]# systemctl start sshd

[root@m01~]# systemctl enable sshd

3.2 ssh客户端里含有的命令

[root@m01 ~]# rpm -ql openssh-clients

/usr/bin/scp  #<==远程拷贝文件(加密)。

/usr/bin/sftp  #<==ftp服务,加密的传输文件。

/usr/bin/ssh  #<==远程连接。

/usr/bin/ssh-copy-id  #<==拷贝密钥中的公钥文件的。

3.3 ssh客户端命令介绍与实践

ssh -p 22 root@10.0.0.31

命令 -p 端口  用户@IP

上述命令相当于ssh 10.0.0.31

[root@m01 ~]# ssh 10.0.0.7

The authenticity of host '10.0.0.7 (10.0.0.7)' can't be established.

ECDSA key fingerprint is SHA256:qZSBkrmOv7xO/63qOU1uLXkPyNVHdkqvrNAcAmXqNEk.

ECDSA key fingerprint is MD5:23:d0:cb:a9:f4:7c:0b:eb:2d:07:00:e1:a3:12:d8:33.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '10.0.0.7' (ECDSA) to the list of known hosts.

root@10.0.0.7's password: #连接需要输入密码

Last login: Thu Apr 18 11:50:33 2019 from 10.0.0.1

[root@m01 ~]# ssh -p 22 [root@10.0.0.7](mailto:root@10.0.0.7) 

root@10.0.0.7's password: #<==第二次连接就不需要输入yes了

Last login: Fri Apr 19 21:01:09 2019 from 10.0.0.61

3.4 scp命令:远程拷贝(secure copy),加密的拷贝

q -P 端口

q -r 递归

q -p 保持属性

q -l 限制速度

q 推:scp -P 22 -rp /data root@172.16.1.7:/tmp/

类似rsync远程shell的推送模式:

rsync -avz /data root@172.16.1.7:/opt

rsync -avz /data -e "ssh -p 22" root@172.16.1.7:/opt

q 拉:scp -P 22 -rp root@172.16.1.7:/tmp/data /tmp/

类似rsync远程shell的拉取模式:

rsync -avz root@172.16.1.7:/opt/data /data

3.5 ssh服务配置优化

[root@web01 /]# cat >>/etc/ssh/sshd_config<<EOF

####Start by oldboy#2018-04-26###

PermitEmptyPasswords no #<==禁止空密码登录,C7默认就是

UseDNS no #不使用dns解析,yes改为no

GSSAPIAuthentication no  #禁止连接慢的解决配置

#ListenAddress 172.16.1.7:22

####End by oldboy#2018-04-26###

EOF

4.项目实战:

一、借助秘钥文件,实现登录的时候不用密码,可以批量分发文件、批量管理服务方案。

方案一:手动生成

1.服务端生成秘钥对:

[root@m01 ~]# ssh-keygen #<==连续按回车就可以

[root@m01 ~]# ls /root/.ssh -l

总用量 12

-rw------- 1 root root 1679 4月 22 12:12 id_rsa #<==私钥,钥匙。

-rw-r--r-- 1 root root 390 4月 22 12:12 id_rsa.pub #<==公钥,锁。

-rw-r--r-- 1 root root 513 4月 22 11:45 known_hosts

2.将公钥放到需要管理的服务器中

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.7

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.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@172.16.1.7's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '172.16.1.7'"

and check to make sure that only the key(s) you wanted were added.

[root@m01 ~]# ssh 172.16.1.7 "ifconfig eth1"

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

 inet 172.16.1.7 netmask 255.255.0.0 broadcast 172.16.255.255

 inet6 fe80::20c:29ff:fe57:5d16 prefixlen 64 scopeid 0x20<link>

 ether 00:0c:29:57:5d:16 txqueuelen 1000 (Ethernet)

 RX packets 6245 bytes 2873978 (2.7 MiB)

 RX errors 0 dropped 0 overruns 0 frame 0

 TX packets 6527 bytes 2306624 (2.1 MiB)

 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

方案二:脚本执行自动生成秘钥对并发送到需要管理的服务器

[root@m01 /server/scripts]# cat miyao.sh

#!/bin/bash

ssh-keygen -f ~/.ssh/id_rsa -P '' -q

for ip in 7 8 31 41

do

 sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip

done

[root@m01 /server/scripts]# sh miyao.sh

拓展知识:开发脚本实现批量管理服务器

[root@m01 /server/scripts]# cat viem.sh #<==批量管理脚本

for n in 7 8

do

 echo -------172.16.1.$n----------

 ssh 172.16.1.$n $1

done

#sh view.sh "cat /etc/redhat-release" 执行脚本并在后面添加需要执行的动作

[root@m01 /server/scripts]# cat fenfa.sh #<==简单批量分发文件脚本

for n in 7 8

do

 echo ----------172.16.1.$n--------

 scp -P 22 -rp $1 root@172.16.1.$n:$2

done

[root@m01 /server/scripts]# cat fenfa1.sh #<==复杂批量分发文件脚本

#!/bin/sh

. /etc/init.d/functions

if [ $# -ne 2 ]

then

 echo "usage:$0 localfile remotedir"

 exit 1

fi

for n in 31 41 51

do

 scp -P 22 -rp $1 root@172.16.1.$n:$2 &>/dev/null

 if [ $? -eq 0 ]

 then

 action "172.16.1.$n successful" /bin/true

 else

 action "172.16.1.$n failure" /bin/false

 fi

done
上一篇 下一篇

猜你喜欢

热点阅读