远程管理SSH服务的搭建
一、搭建SSH服务
1、关闭防火墙与SELinux
# 关闭firewalld防火墙
# 临时关闭
systemctl stop firewalld
# 关闭开机自启动
systemctl disable firewalld# 关闭selinux
# 临时关闭
setenforce 0
# 修改配置文件 永久关闭
vim /etc/selinux/config
SELINUX=disabled
2、配置yum源
该步骤我们我们已经在前面的博客中有讲到。因此在这里不在赘述。
详细步骤请参考:
本地yum源的配置详解https://blog.csdn.net/2302_79546368/article/details/146285768?fromshare=blogdetail&sharetype=blogdetail&sharerId=146285768&sharerefer=PC&sharesource=2302_79546368&sharefrom=from_link
网络yum源的配置https://blog.csdn.net/2302_79546368/article/details/145029775?fromshare=blogdetail&sharetype=blogdetail&sharerId=145029775&sharerefer=PC&sharesource=2302_79546368&sharefrom=from_link
3、openssh软件的安装
SSH服务底层的软件名称叫做openssh,open开源,ssh就是ssh服务。openssh属于C/S架构软件,其拥有客户端与服务器端。
- 客户端:ssh
- 服务端:openssh-server
检查openssh是否安装成功
# rpm -qa |grep openssh 或 yum list installed |grep openssh
基于yum安装:
# yum install openssh -y
获取openssh生成的文件列表
# rpm -ql openssh-server
# 服务端配置文件
/etc/ssh/sshd_config ----> ssh服务的主配置文件
/etc/sysconfig/sshd
# 服务管理脚本
/usr/lib/systemd/system/sshd.service ----> systemctl start sshd
# 文件共享服务 提供文件上传下载的服务
/usr/libexec/openssh/sftp-server
# 二进制文件程序文件
/usr/sbin/sshd
# 公钥生成工具
/usr/sbin/sshd-keygen
# man手册
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
# rpm -ql openssh-clients
# 客户端配置文件
/etc/ssh/ssh_config
# 远程copy命令 服务器间进行文件传输
/usr/bin/scp
# sftp客户端 上传下载文件操作
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
# 客户端man手册
/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/slogin.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz
4、查看并修改ssh服务端的配置文件
# man 5 sshd_config
- RealServer:禁止root账号远程登录
# man 5 sshd_config PermitRootLogin yes; # yes or no,默认为yes 代表允许通过root账号远程登录此服务器
# vim /etc/ssh/sshd_config 38行 PermitRootLogin no
- 更改SSH默认端口
# vim /etc/ssh/sshd_config 17行 Port 1314
- SSH客户端不验证指纹
第一次连接远程服务器时:
The authenticity of host '11.1.1.100 (11.1.1.100)' can't be established. ECDSA key fingerprint is SHA256:Y/cQNWWkX15o2MsJ5HOQBI2m8S33qIA+x3zys8J4pOY. ECDSA key fingerprint is MD5:76:61:86:8b:d5:ee:bf:9c:60:e6:12:fa:f6:f0:74:36. Are you sure you want to continue connecting (yes/no)?yes Warning: Permanently added '11.1.1.100' (ECDSA) to the list of known hosts.
如果我们不想验证指纹,可以通过更改SSH客户端的配置文件
# vim /etc/ssh/ssh_config StrictHostKeyChecking no
- 限制ssh监听的IP
这个适用于服务器有多个IP,这样我们就可以只监听内网IP,这样就只能用在同一个局域网的机器去 连接,而我们只需要让在同一个服务器的另网卡的IP监听在外网.
vim /etc/ssh/sshd_config ListenAddress 192.168.17.14
- 禁止使用密码登录
vim /etc/ssh/sshd_config PasswordAuthentication yes
而我们需要传公钥就得要密码这是很矛盾的,所以需要我们提前把公钥传给服务器,或者临时开启 密码登录,然后就能实现登录了。 在企业内部,基本都会将公钥在装机的时候,就直接通过注入的方式如cloud-init,直接进行注入。
- 补充
PermitRootLogin no // 禁止root用户登录 PermitEmptyPasswords no // 禁止空密码用户登录 一旦启用了PermitEmptyPasswords yes,那么所有无密码的用户也就可以远程登录了,并且还是免密码的方式。 LoginGraceTime 2m // 登录验证时间为2分钟 MaxAuthTries 6 // 最大重试次数6次 AllowUsers steven // 只允许steven用户登录 DenyUsers steven // 不允许登录用户 steven MaxSessions // 最大终端会话个数 1 PasswordAuthentication yes //启用密码验证 2 PubkeyAuthentication yes //启用密匙验证 3 AuthorsizedKeysFile .ssh/authorized_keys //指定公钥数据库文件
5、sshd服务管理
# systemctl restart sshd 重启
# systemctl status sshd 状态
# systemctl stop sshd 停止
# systemctl start sshd 启动# systemctl enable sshd 开机自启动
# systemctl disable sshd 开机不自启# ps -ef |grep sshd 进程
或
# netstat -tnlp |grep sshd 端口
或
# ss -naltp |grep sshd
6、专业工具pwgen生成用户密码
在实际生产环境中,其用户密码一定不要手工设置,建议使用专业的密码生成工具如pwgen。
配置EPEL源,安装pwgen工具
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum clean all
# yum makecache
安装pwgen密码生成工具
# yum install pwgen -y
使用pwgen生成随机密码
# pwgen -cnBs1 10 1
扩展:pwgen密码生成器的使用
# pwgen --help
# 用法: pwgen 选项参数 长度 生成个数
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]
# 密码中至少包含一个大写字母
-c or –capitalize
# 密码中不包含大写字母
-A or –no-capitalize
# 密码中至少包含一个数字
-n or –numerals
# 密码中不包含数字
-0 or –no-numerals
# 密码中至少包含一个特殊符号
-y or –symbols
# 生成完全随机密码
-s or –secure
# 密码中不包含歧义字符(例如1,l,O,0)
-B or –ambiguous
# 使用SHA1 hash给定的文件作为一个随机种子
-H or –sha1=path/to/file[#seed]
# 在列中打印生成的密码
-C
# 不要在列中打印生成的密码,即一行一个密码
-1
# 不要使用任何元音,以避免偶然的脏话
-v or –no-vowels
二、SSH服务补充
1、scp命令
主要功能:用于Linux系统与Linux系统之间进行文件的传输(上传、下载)
选项:
- -r : 递归上传,主要针对文件夹
- -P : 更换了SSH服务的默认端口必须使用-P选项
- -p:表示在拷贝前后保持文件或目录属性
上传(push):
# scp [选项] 本地文件路径 远程用户名@远程服务器的IP地址:远程文件存储路径
下载(pull):
# scp [选项] 远程用户名@远程服务器的IP地址:远程文件路径 本地文件存储路径
2、踢出用户
# 查看当前在线用户
w
# 踢出某个账号
pkill -kill -t pts/1
三、SSH免密登录解决方案
1、为什么需要免密登录?
- 提高效率:避免频繁输入密码,特别是在需要频繁连接多台服务器时。
- 安全性:使用 SSH 密钥对可以比密码提供更强的安全保障。
- 自动化:便于自动化脚本和 CI/CD 流程的无干预执行。
- 减少错误:减少因手动输入密码导致的错误。
总的来说,SSH 免密登录通过提高操作便捷性和安全性,优化了服务器管理的流程。
2、SSH认证原理(基于用户名密码+基于密钥对)
① 回顾基于用户名密码的认证方式(ssh的访问过程)
② 基于密钥对(公钥与私钥)的认证方式 => 免密登录
A主机JumpServer,B主机 ealServer
- 第一步:在A主机(JumpServer)生成一个密钥对(公钥和私钥)。
- 第二步:把A主机的公钥通过网络拷贝到B主机(RealServer)上,然后把其内容追加到B主机的~/.ssh/authorized_keys
- 第三步:由A主机(JumpServer)向B主机(RealServer)发起登录请求,然后直接在B主机上进行公钥比对(判断A主机的公钥是否已经存储在B主机的authorized_keys文件中),如果存在且正确,则生成一个随机的字符串(如itcast),然后使用A主机的公钥对其加密得到加密的后字符串(如dXdh,34njasz!z.)
- 第四步:通过网络,由B主机讲刚才生成的加密后的字符串传输给主机A,主机A接收到加密后的字符串以后,使用自己本地存储的私钥进行解密操作(得到itcast)
- 第五步:把解密得到的itcast发送到B主机,然后验证与刚才生成的字符串是否一致,如果一致,返回登录成功。反之,则返回登录失败。
到此免密登录全部完成!
3、SSH免密登录的具体实现
SSH免密的实现思路一共分为三个步骤(三步走)
- 第一步:在A主机针对某个账号(tom或jerry)生成公钥与私钥
- 第二步:使用某些方法把公钥发送到B主机中,然后追加到authorized_keys文件中
- 第三步:测试是否实现免密登录
☆ 方法一:比较常用
① 在A主机针对某个账号生成公钥与私钥
# ssh-keygen
注:如果不想一路确认,可以在ssh-keygen -P “”,直接生成公私钥
② 使用ssh-copy-id把公钥文件中的内容传输到服务器端的~/.ssh/authorized_keys文件中
# ssh-copy-id -p 3712 code@11.1.1.100
code@11.1.1.100's password:123456
③ 在JumpServer客户端测试免密登录是否成功
# ssh -p 3721 code@11.1.1.100
☆ 方法二:集群常用(jerry)
① 生成公钥与私钥
# ssh-keygen
② 把id_rsa.pub文件,scp到服务器端(也可以使用rsync,后面我们会讲到)
# scp -P 3721 ~/.ssh/id_rsa.pub code@11.1.1.100:/home/code/
③ 在服务器端,把id_rsa.pub文件中的内容追加到~/.ssh/authorized_keys文件中
# cd ~
# cat id_rsa.pub >> ~/.ssh/authorized_keys
> 注意事项:实际应用时要注意文件的权限
~/.ssh : 700
~/.ssh/authorized_keys : 600 保存已授权的客户端公钥
~/.ssh/id_rsa :600
~/.ssh/id_rsa.pub :644 known_hosts:保存已认证的远程主机公钥
④ 测试免密是否成功
# ssh -p 3721 code@11.1.1.100
本 篇 完 结 … …
持 续 更 新 中 … …