第四个服务–SSHD服务

第二个部分-集群批量管理与维护

1.基础:

SSHD服务配置文件☆ ☆ ☆ ☆ ☆

ssh客户端命令:ssh,scp,sftp

ssh密钥认证(免密码登录,双机互信)☆ ☆ ☆ ☆ ☆

Ansible批量分发,批量管理,批量维护与部署

对于已经掌握使用流程的服务,进行批量管理

2.0 目标

修改sshd服务端配置文件修改ssh端口号,修改ssh禁用root远程登录.

使用ssh命令远程连接,使用scp传输数据.

配置主机的秘钥认证(写成脚本)

Ansible进行初步批量管理

2.1 openssh服务

实现加密的远程连接/传输数据.

openssh-server 服务端(sshd,/etc/ssh/sshd_config)

openssh-clients客户端命令  scp,ssh

2.2 telnet 服务端vs openssh 服务端

telnet服务

#1.安装服务

yum install  -y telnet-server

#2.启动

systemctl disable   telnet.socket

systemctl start  telnet.socket

#3.本地shell中连接

telnet 10.0.0.61   23

麒麟系统中telnet-server属于telnet软件包

2.4 Openssh-server配置文件

核心配置文件: /etc/ssh/sshd_config

/etc/ssh/ssh_config 客户端配置文件

/etc/ssh/sshd_config 服务端配置文件

Linux系统ssh远程连接优化配置

##1. 注释掉sshd服务端已有的配置

sed -ri.bak ‘/^(UseDNS|GSSAPIAuth|Port|PermitRoot)/s@^@#@g’ /etc/ssh/sshd_config

##2. 重新配置连接优化,端口,是否准许root的远程登录.

cat >>/etc/ssh/sshd_config<<EOF

UseDNS no

GSSAPIAuthentication no

Port 22

PermitRootLogin yes

EOF

2.5 Openssh-Clients客户端命令

scp 远程传输文件

ssh 远程连接

sftp 远程传输文件(一般开发通过图形化界面使用ftp工具)

1) scp ☆☆☆☆☆

#scp使用方式

scp 文件/目录     用户名@ip:路径

-r 递归传输,传输目录

-p 保持属性信息不变

-rp 人品

-P(大写) Port 指定端口号

scp  -rp -P 22   /etc/hostname   root@10.0.0.41:/tmp/

2) ssh ☆☆☆☆☆

功能:

  1. 远程连接.
  2. 远程连接并执行命令或脚本.(不要执行交互式命令)

案例01: 使用oldboy用户远程连接到10.0.0.41的22端口

ssh -p 22 oldboy@10.0.0.41

案例02: 使用oldboy用户远程连接到10.0.0.41的22端口并执行whoami命令或ip a 命令

ssh -p 22 oldboy@10.0.0.41 whoami

案例03: 远程连接10.0.0.31节点并执行多条命令:whoami , pwd, hostname命令

ssh -p22 nfs01  "whoami Վ阪 pwd Վ阪 hostname -I "

ssh -p22 nfs01  "whoami ; pwd ; hostname -I   "

&& 并且,命令行中表示前一个命令执行成功再执行后面的命令.

; 分号,分隔命令.相当于是1行的结束.

3) sftp

ftp 文件传输协议

sftp linux中ftp客户端和lrzsz类似.

lrzsz传输大文件较慢. 推荐使用scp即可.

ftp工具开发人员使用.操作linux的目录和文件.

ftp文件传输协议,服务和客户端,服务端端口是21和20.

openssh (sshd)也提供了,ftp功能,sftp,端口是22.

ftp客户端:常用sftp命令,软件xftp,winscp……….

如果上传大文件建议使用ftp或scp

2.6 Openssh小结

openssh 服务 vs telnet 服务区别

openssh服务端: /etc/ssh/sshd_config端口,禁用root远程登录.

openssh 客户端: scp(-rp -P端口) ssh(-p端口)

2.7 密钥认证 ☆☆☆☆☆

1) 概述

Linux中我们要连接主机,输入用户密码然后连接.

我们发现每次连接都要输入密码,对于一些批量操作不方便.

我们需要有一种新的认证方法,每次连接不需要输入密码.

这个方法叫: 密钥认证(免密码登录,双机互信.)

2) 原理(流程)

3) 手动创建与分发密钥 ☆☆☆☆☆

①创建秘钥对

②发送公钥给对应的节点.

#1.创建密钥对

ssh-keygen #然后3个回车即可.

存储在/root/.ssh/id_rsa

#2.分发公钥到对应的节点

ssh-copy-id  -i /root/.ssh/id_rsa.pub  root@172.16.1.31

#把公钥传输到对应节点的~/.ssh/authorized_keys

#3.检验

ssh root@172.16.1.31 hostname

温馨提示:

不要修改.ssh目录权限,家目录权限.密钥文件的权限

正确ssh文件权限示意:

[root@m01 ~]# ll -d /root/

dr-xr-x—  3 root root 191  2月 23 12:00 /root/

[root@m01 ~]# ll -d /root/.ssh/

drwx—— 2 root root 57  3月  1 10:06  /root/.ssh/

[root@m01 ~]# ll /root/.ssh/

总用量 12

-rw——- 1 root root 2590  3月  1 10:02 id_rsa

-rw-r–r– 1 root root  562  3月  1 10:02 id_rsa.pub

-rw-r–r– 1 root root  170  3月  1 10:06 known_hosts

4) 如何自动分发公钥

阻碍:

输入yes/no

输入密码

输入密码: sshpass

自动输入密码的解决方案:

sshpass:推荐简单易用.给ssh相关命令提供密码.

expect:较为复杂,语言,实现把交互转换为非交互.

sshpass -p1 ssh-copy-id  172.16.1.41

-p指定ssh的密码

如果.41是第1次连接,则需要输入yes/no,这个就会导致sshpass+ssh-copy-id失败.

sshpass选项

-p指定密码

-f指定密码文件(密码放在文件中)

-e 从SSHPASS环境变量读取

export SSHPASS=xxxx

解决yes/no的问题

linux连接新的主机的时候,做了1个主机信息认证(校验),选择yes后信息就会被存放到~/.ssh/known_hosts文件中.

希望分发公钥的时候临时关闭这个功能.

HostKeyChecking或StrictHostKeyChecking

彻底关闭yes/no提示. Host key check

仅仅在使用ssh-copy-id的时候关闭(临时)

sshpass -p1 ssh-copy-id -o StrictHostKeyChecking=no 172.16.1.41

#-o选项本质是ssh命令的选项

5) 一键创建秘钥对 ☆☆☆☆☆

ssh-keygen  -f /root/.ssh/id_rsa   -P  ”

-f 指定密钥文件位置和文件名

-P 指定密码短语 “” ” 表示设置为空.

6) 书写一键脚本

  1. 检查密钥文件是否存在,如果不存在则创建 ~/.ssh/id_rsa
  2. ip列表(变量,文件,数组)分发公钥
  3. for+分发命令
  4. 检查成功,失败
  5. for+批量执行命令
  6. for+ssh命令 hostname -I

cat /server/scripts/fenfa.sh

#!/bin/bash

#author: lidao996

#desc:

#   1.一键创建秘钥对(如果不存在)

#   2.一键分发公钥

#   3.一键检查

#1. vars

key=/root/.ssh/id_rsa

ips=”7 31 41″

pass=1

#ips=”`cat /server/files/ip.txt`”

#2. 一键创建秘钥对

if [ ! -f $key ];then

ssh-keygen  -f $key   -P  ” &>/dev/null

 if [ $? -eq 0 ];then

    echo “秘钥对创建成功”

 else

cho “密钥对创建失败”

    exit 1

 fi

fi

#3. 一键分发公钥

echo “分发公钥-开始”

for ip  in  $ips

do

    sshpass -p$pass ssh-copy-id -o

StrictHostKeyChecking=no 172.16.1.$ip

     #这里也可以通过$? + if判断公钥分发是否成功

done

echo “分发公钥-完成”

#4. 一键检查

echo “检查-开始”

for ip in $ips

do

     ssh  -o StrictHostKeyChecking=no  172.16.1.$ip

hostname -I

     #这里也可以通过$? + if执行是否成功

done

echo “检查-结束”

7) 密钥认证小结

密钥认证完成后通过脚本实现基本的批量管理.

书写脚本+ssh/scp命令.

密钥认证后面很多服务所必须的底层环境: ansible.

2.8 SSHD小结

修改sshd服务端配置文件修改ssh端口号,修改ssh禁用root远程登录.

使用ssh命令远程连接,使用scp传输数据.

配置主机的秘钥认证(写成脚本)

Ansible进行初步批量管理

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部