目录
一、SSH服务
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_confi
1.SSH服务的定义
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
SSH客户端<--------------网络---------------->SSH服务端
2.SSH服务端功能
ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务
3.SSH的作用
SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。 相比较之前Telnet 方式来传输文件要安全很多,因为 Telnet 使用明文传输,SSH 是加密传输。
4.SSH服务的优点
(1)数据传输是加密的,可以防止信息泄漏
(2)数据传输是压缩的,可以提高传输速度
5.PS
OpenSSH 常用配置文件有两个/etc/ssh/ssh_config 和/etc/sshd_config。
ssh_config:为客户端配置文件,设置与客户端相关的应用可通过此文件实现
sshd_config:为服务器端配置文件,设置与服务端相关的应用可通过此文件实现
二、SSH原理
1.公钥传输原理
(1)客户端发起链接请求
(2)服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
(3)客户端生成密钥对
(4)客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
(5)客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
(6)服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
(7)最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
2.密钥对传输
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用
(1)首先在客户端生成一对密钥(ssh-keygen)
(2)并将客户端的公钥ssh-copy-id 拷贝到服务端
(3)当客户端再次发送一个连接请求,包括ip、用户名
(4)服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc
(5)服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
(6)得到服务端发来的消息后,客户端使用私钥进行解密,然后将解密后的字符串发送给服务端
(7)服务端接受到客户端发来的字符串后,跟之前的字符串做对比,一致,就允许免密码登录
[root@localhost ~]# ssh-keygen -t ecdsa 生成一对密钥
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa): (以下敲回车就行)
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): (这里为空是不设置密码)
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:ZxkrlM1SHl5jqZwx/qWXDq9Bz6O8Pt240tmm1S7wmGo root@localhost.localdomain
The key's randomart image is:
+---[ECDSA 256]---+
| o +. |
| Bo+.. |
| +o*= |
| . .=+ . |
| S =..o . |
| + .=oo .|
| .%+=o|
| E.=oX++|
| ..o*=o=.|
+----[SHA256]-----+
[root@localhost ~]# ls
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
[root@localhost ~]# pwd
/root
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_ecdsa.pub root@192.168.174.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_ecdsa.pub"
The authenticity of host '192.168.174.10 (192.168.174.10)' can't be established.
ECDSA key fingerprint is SHA256:1XmFVZ+wrx3C8mk+3zbaOxW8dFr+sBbmi4KYtAcQbMc.
ECDSA key fingerprint is MD5:e1:e9:2e:0f:d6:81:cd:38:bf:23:6a:ac:59:9f:49:97.
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@192.168.174.10's password: 这是输入的是被连接的主机的root登录密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.174.10'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost ~]# ssh root@192.168.174.10
Last login: Thu Oct 7 14:03:53 2021 from 192.168.174.1
[root@localhost ~]#
与用户密码无关,与IP地址无关,只与密钥对有关
所以当密码更新后,依旧可以登录
3.服务端配置
[root@localhost ~]# vim /etc/ssh/sshd_config
Port 22 生产建议修改
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes 默认ubuntu不允许root远程ssh登录
StrictModes yes 检查.ssh/文件的所有者,权限等
MaxAuthTries 6 pecifies the maximum number of authentication
ssh -o NumberOfPasswordPrompts=8root@192.168.174.10
需要配合这个选项一起使用
attempts permitted per connection. Once the number of failures reaches half this
value, additional failures are logged. The default is 6.
MaxSessions 10 同一个连接最大会话
PubkeyAuthentication yes 基于key验证
PermitEmptyPasswords no 空密码连接
PasswordAuthentication yes 基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 单位:秒
ClientAliveCountMax 3 默认3
UseDNS yes 提高速度可改为no
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups 未认证连接最大值,默认值10
Banner /path/file
以下可以限制可登录用户的办法:白名单 黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
4.ssh客户端
scp命令 —— 远程安全复制
sftp命令 —— 安全FTP上下载
格式:sftp user@host
三、轻量级自动化运维工具pssh
1.功能
基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh
和scp的多个并行工具,项目:http://code.google.com/p/parallel-ssh/
2.命令选项
选项 | 功能 |
-H | 主机字符串,内容格式”[user@]host[:port]” |
-h | file:主机列表文件,内容格式”[user@]host[:port]” |
-A | 手动输入密码模式 |
-i | 每个服务器内部处理信息输出 |
-l | 登陆使用的用户名 |
-p | 并发的线程数【可选】 |
-o | 输出的文件目录【可选】 |
-e | 错误输出文件【可选】 |
-t | TIMEOUT超时时间设置,0无限制【可选】 |
-O | SSH的选项 |
-P | 打印出服务器返回信息 |
-v | 详细模式 |
--version | 查看版本 |
3.配置项目
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@localhost yum.repos.d]# vim CentOS-Base.repo
大G到行末,进入插入模式
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
https://mirrors.huaweicloud.com/epel/$releasever/x86_64
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0
:wq
[root@localhost yum.repos.d]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: base epel extras updates
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
[root@localhost yum.repos.d]# yum repolist
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base 10,072
epel/7 epel 13,674
extras/7/x86_64 CentOS-7 - Extras 500
updates/7/x86_64 CentOS-7 - Updates 2,751
repolist: 26,997
[root@localhost yum.repos.d]# yum install -y pssh yum安装pssh
已加载插件:fastestmirror, langpacks
已安装:
pssh.noarch 0:2.3.1-5.el7
完毕!
[root@localhost yum.repos.d]# 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:egryI774MkPSGWmQ2rlutosTojKOhUG6pFZhw2qzlSg root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| . |
|o . |
|.+ B |
|+ X + |
|EO B S |
|O=O . |
|O=o . . . |
|@+=o.. o |
|*%*=... |
+----[SHA256]-----+
[root@localhost yum.repos.d]# ssh-copy-id 192.168.174.10
Are you sure you want to continue connecting (yes/no)? yes 输入yes
root@192.168.174.10's password: 这里输入客户端主机密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.174.10'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost yum.repos.d]# ssh-copy-id 192.168.174.20
Are you sure you want to continue connecting (yes/no)? yes 输入yes
root@192.168.174.20's password: 这里输入客户端主机密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.174.20'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost yum.repos.d]# pssh -H "192.168.174.10" -i touch /etc/wangbin
[1] 15:29:56 [SUCCESS] 192.168.174.10
管理多台,写入一个文件
检验(以下为主机192.168.174.10上的操作)
[root@localhost ~]# cd /etc
[root@localhost etc]# ls
四、总结
本章主要讲了ssh的原理以及配置用法,还给大家带来了方便多台统一管理的小工具pssh,希望对大家有所帮助!