大家好呀!这里是码农后端。上一篇介绍了SSH服务搭建之YUM源配置与静态IP配置,本篇将介绍SSH服务搭建的软件安装、相关服务补充以及SSH免密登录的实现。
1)openssh概述
SSH服务底层的软件名称叫做openssh,open即开源,ssh即ssh服务。
openssh属于C/S架构软件,拥有客户端与服务器端。
客户端:ssh
服务端:openssh-server
2)安装:
yum install openssh -y
3)查看openssh是否安装成功
# 使用管道结合grep命令
rpm -qa |grep openssh
#或列出已安装的openssh
yum list installed |grep openssh
4)获取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
需求:禁止root账号远程登录(RealServer服务器端)
1)使用man 5命令查看文档
man 5 sshd_config
PermitRootLogin => yes or no,默认为yes 代表允许通过root账号远程登录此服务器
# 打开服务器端配置文件
vim /etc/ssh/sshd_config
# 修改第38行
PermitRootLogin no
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
JumpServer跳板机创建用户并授权
1)创建用户与用户组
# 创建html前端组
groupadd html
# 创建组内用户tom与jerry
useradd -g html tom
useradd -g html jerry
2)为用户设置密码
echo 123456 |passwd --stdin tom
echo 123456 |passwd --stdin jerry
3)为开发人员创建数据目录并且设置相应的权限
① 创建用户的数据目录:
mkdir -p /code/html => 前端组
ll -d /code/html
drwxr-xr-x. 2 root root 6 May 24 10:36 /code/html
② 更改目录的文件所属组(更改为html,代表html组内成员可以对这个目录进行管理)
chgrp -R html /code/html
drwxr-xr-x. 2 root html 6 May 24 10:36 /code/html
给该组追加一个写权限
chmod -R g+w /code/html
drwxrwxr-x. 2 root html 6 May 24 10:36 /code/html
③ 添加粘滞位权限,防止误删除操作
chmod 1770 /code/html
drwxrwx--T. 2 root html 6 May 24 10:36 /code/html
RealServer服务器端:
# 打开服务器端配置文件
vim /etc/ssh/sshd_config
# 修改第38行
PermitRootLogin no
RealServer服务器端:
# 打开服务器端配置文件
vim /etc/ssh/sshd_config
# 修改第17行,如修改端口为3712
Port 3712
systemctl restart sshd
# 或
systemctl reload sshd
restart与reload的区别:
① restart相当于stop然后在start
② reload不停止现有业务,只是重新加载sshd对应的配置文件
在RealServer创建一个code账号
# 创建账号
useradd code
# 设置密码
echo 123456 |passwd --stdin code
测试:在JumpServer远程连接RealServer(IP:192.168.91.128)
ssh -p 3721 code@192.168.91.128
第一次连接远程服务器时,会验证指纹信息:
The authenticity of host '192.168.91.128 (192.168.91.128)' 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 '192.168.91.128' (ECDSA) to the list of known hosts.
如果不想验证指纹,可以更改SSH客户端的配置文件
JumpServer客户端:
# 打开客户端配置文件
vim /etc/ssh/ssh_config
# 修改第35行
StrictHostKeyChecking no
在实际生产环境中,用户密码建议使用专业的密码生成工具如pwgen设置,要避免手工设置。
① 安装随机密码生成工具pwgen
② 使用pwgen工具生成随机密码
③ 给账号code设置密码
1)创建code开发者账号
useradd code
2)配置EPEL扩展源,安装pwgen工具
# 使用wget获取epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
3)安装pwgen密码生成工具
yum install pwgen -y
4)使用pwgen生成随机密码
pwgen
扩展: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
eg:生成长度为10,包含大写、数字、不包含模糊字符完全随机的3个密码
pwgen -cnBs1 10 3
用于Linux与Linux系统之间进行文件的传输(上传、下载)
1)上传:
scp [选项] 本地文件路径 远程用户名@远程服务器的IP地址:远程文件存储路径
# 选项说明
-r : 递归上传,主要针对文件夹
-P : 若更换了SSH服务的默认端口,必须使用-P选项
2)下载:
scp [选项] 远程用户名@远程服务器的IP地址:远程文件路径 本地文件存储路径
# 选项说明
-r : 递归上传,主要针对文件夹
-P : 若更换了SSH服务的默认端口,必须使用-P选项
# 查看当前在线用户
w
# 移除某个账号
pkill -kill -t 要移除的账号
使用密码SSH登录的方式比较麻烦,如每次登录都要输入密码,不仅难记而且容易泄露。为了安全和方便,实现免密登录。
基于用户名密码和基于密钥对两种认证方式。
1)基于用户名密码的认证
JumpServer =>ssh code@RealServer的IP地址
2)基于密钥对(公钥与私钥)的认证方式 => 免密登录
A主机 => JumpServer,B主机 => RealServer
SSH免密的实现一般分为三步:
1)在A主机针对某个账号(tom或jerry)生成公钥与私钥
2)使用某些方法把公钥发送到B主机中,然后追加到authorized_keys文件中
3)测试是否实现免密登录
方法一(较常用)
① 在A主机针对某个账号生成公钥与私钥
ssh-keygen
注:如不想一路确认,可使用ssh-keygen -P "",直接生成公私钥
② 使用ssh-copy-id把公钥文件中的内容传输到服务器端的~/.ssh/authorized_keys文件中
ssh-copy-id -p 3712 code@192.168.91.128
# 输入密码
code@192.168.91.128's password:123456
③ 在JumpServer客户端测试免密登录是否成功
ssh -p 3721 code@192.168.91.128
方法二(集群常用)
① 生成公钥与私钥
ssh-keygen
② 把id_rsa.pub文件,scp到RealServer服务器端
scp -P 3721 ~/.ssh/id_rsa.pub code@192.168.91.128:/home/code/
③ 在RealServer服务器端,把id_rsa.pub文件中的内容追加到~/.ssh/authorized_keys文件中
# 回到家目录
cd ~
# 追加
cat id_rsa.pub >> ~/.ssh/authorized_keys
注:上述配置虽然比较简单,但是实际应用时要注意文件的权限
RealServer对应权限:
~/.ssh : 700
~/.ssh/authorized_keys : 600
④ 测试免密是否成功
ssh -p 3721 code@192.168.91.128
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。