前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSH服务搭建及免密登录实现

SSH服务搭建及免密登录实现

原创
作者头像
reload
修改2024-07-06 00:18:48
1510
修改2024-07-06 00:18:48
举报
文章被收录于专栏:Linux运维

大家好呀!这里是码农后端。上一篇介绍了SSH服务搭建之YUM源配置与静态IP配置,本篇将介绍SSH服务搭建的软件安装、相关服务补充以及SSH免密登录的实现。

1、安装openssh

1)openssh概述

SSH服务底层的软件名称叫做openssh,open即开源,ssh即ssh服务。

openssh属于C/S架构软件,拥有客户端与服务器端。

客户端:ssh

服务端:openssh-server

2)安装:

代码语言:powershell
复制
yum install openssh -y

3)查看openssh是否安装成功

代码语言:powershell
复制
# 使用管道结合grep命令
rpm -qa |grep openssh
#或列出已安装的openssh
yum list installed |grep openssh

4)获取openssh生成的文件列表

服务器端:

代码语言:powershell
复制
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

客户端:

代码语言:powershell
复制
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

2、查看并修改ssh服务端配置文件

需求:禁止root账号远程登录(RealServer服务器端)

1)使用man 5命令查看文档

代码语言:powershell
复制
man 5 sshd_config

PermitRootLogin => yes or no,默认为yes 代表允许通过root账号远程登录此服务器

代码语言:powershell
复制
# 打开服务器端配置文件
vim /etc/ssh/sshd_config
# 修改第38行
PermitRootLogin no

3、sshd服务管理

代码语言:powershell
复制
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

4、SSH服务任务解决方案

4.1 创建用户并授权

JumpServer跳板机创建用户并授权

1)创建用户与用户组

代码语言:powershell
复制
# 创建html前端组
groupadd html

# 创建组内用户tom与jerry
useradd -g html tom
useradd -g html jerry

2)为用户设置密码

代码语言:powershell
复制
echo 123456 |passwd --stdin tom
echo 123456 |passwd --stdin jerry

3)为开发人员创建数据目录并且设置相应的权限

① 创建用户的数据目录:

代码语言:powershell
复制
mkdir -p /code/html		=> 前端组
ll -d /code/html

drwxr-xr-x. 2 root root 6 May 24 10:36 /code/html

② 更改目录的文件所属组(更改为html,代表html组内成员可以对这个目录进行管理)

代码语言:powershell
复制
chgrp -R html /code/html

drwxr-xr-x. 2 root html 6 May 24 10:36 /code/html

给该组追加一个写权限

代码语言:powershell
复制
chmod -R g+w /code/html

drwxrwxr-x. 2 root html 6 May 24 10:36 /code/html

③ 添加粘滞位权限,防止误删除操作

代码语言:powershell
复制
chmod 1770 /code/html

drwxrwx--T. 2 root html 6 May 24 10:36 /code/html

4.2 禁用root登录

RealServer服务器端:

代码语言:powershell
复制
# 打开服务器端配置文件
vim /etc/ssh/sshd_config
# 修改第38行
PermitRootLogin no

4.3 更改SSH默认端口

RealServer服务器端:

代码语言:powershell
复制
# 打开服务器端配置文件
vim /etc/ssh/sshd_config
# 修改第17行,如修改端口为3712
Port 3712

4.4 重启SSH服务

代码语言:powershell
复制
systemctl restart sshd
# 或
systemctl reload sshd

restart与reload的区别:

① restart相当于stop然后在start

② reload不停止现有业务,只是重新加载sshd对应的配置文件

4.5 远程连接测试

在RealServer创建一个code账号

代码语言:powershell
复制
# 创建账号
useradd code
# 设置密码
echo 123456 |passwd --stdin code

测试:在JumpServer远程连接RealServer(IP:192.168.91.128)

代码语言:powershell
复制
ssh -p 3721 code@192.168.91.128

4.6 SSH客户端不验证指纹

第一次连接远程服务器时,会验证指纹信息:

代码语言:powershell
复制
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客户端:

代码语言:powershell
复制
# 打开客户端配置文件
vim /etc/ssh/ssh_config
# 修改第35行
StrictHostKeyChecking no

4.7 pwgen工具生成用户密码

在实际生产环境中,用户密码建议使用专业的密码生成工具如pwgen设置,要避免手工设置。

① 安装随机密码生成工具pwgen

② 使用pwgen工具生成随机密码

③ 给账号code设置密码

1)创建code开发者账号

代码语言:powershell
复制
useradd code

2)配置EPEL扩展源,安装pwgen工具

代码语言:powershell
复制
# 使用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密码生成工具

代码语言:powershell
复制
yum install pwgen -y

4)使用pwgen生成随机密码

代码语言:powershell
复制
pwgen

扩展:pwgen密码生成器的使用

代码语言:powershell
复制
# 使用帮助
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个密码

代码语言:powershell
复制
pwgen -cnBs1 10 3

5、SSH服务补充

5.1 scp命令

用于Linux与Linux系统之间进行文件的传输(上传、下载)

1)上传:

代码语言:powershell
复制
scp [选项] 本地文件路径 远程用户名@远程服务器的IP地址:远程文件存储路径
# 选项说明
-r : 递归上传,主要针对文件夹
-P : 若更换了SSH服务的默认端口,必须使用-P选项

2)下载:

代码语言:powershell
复制
scp [选项] 远程用户名@远程服务器的IP地址:远程文件路径 本地文件存储路径
# 选项说明
-r : 递归上传,主要针对文件夹
-P : 若更换了SSH服务的默认端口,必须使用-P选项

5.2 移除用户

代码语言:powershell
复制
# 查看当前在线用户
w
# 移除某个账号
pkill -kill -t 要移除的账号

6、SSH免密登录

使用密码SSH登录的方式比较麻烦,如每次登录都要输入密码,不仅难记而且容易泄露。为了安全和方便,实现免密登录。

6.1 SSH认证原理

基于用户名密码基于密钥对两种认证方式。

1)基于用户名密码的认证

JumpServer =>ssh code@RealServer的IP地址

2)基于密钥对(公钥与私钥)的认证方式 => 免密登录

A主机 => JumpServer,B主机 => RealServer

6.2 实现

SSH免密的实现一般分为三步:

1)在A主机针对某个账号(tom或jerry)生成公钥与私钥

2)使用某些方法把公钥发送到B主机中,然后追加到authorized_keys文件中

3)测试是否实现免密登录

方法一(较常用)

① 在A主机针对某个账号生成公钥与私钥

代码语言:powershell
复制
ssh-keygen

注:如不想一路确认,可使用ssh-keygen -P "",直接生成公私钥

② 使用ssh-copy-id把公钥文件中的内容传输到服务器端的~/.ssh/authorized_keys文件中

代码语言:powershell
复制
ssh-copy-id -p 3712 code@192.168.91.128
# 输入密码
code@192.168.91.128's password:123456

③ 在JumpServer客户端测试免密登录是否成功

代码语言:powershell
复制
ssh -p 3721 code@192.168.91.128

方法二(集群常用)

① 生成公钥与私钥

代码语言:powershell
复制
ssh-keygen

② 把id_rsa.pub文件,scp到RealServer服务器端

代码语言:powershell
复制
scp -P 3721 ~/.ssh/id_rsa.pub code@192.168.91.128:/home/code/

③ 在RealServer服务器端,把id_rsa.pub文件中的内容追加到~/.ssh/authorized_keys文件中

代码语言:powershell
复制
# 回到家目录
cd ~
# 追加
cat id_rsa.pub >> ~/.ssh/authorized_keys

注:上述配置虽然比较简单,但是实际应用时要注意文件的权限

RealServer对应权限:

代码语言:powershell
复制
~/.ssh : 700
~/.ssh/authorized_keys : 600

④ 测试免密是否成功

代码语言:powershell
复制
ssh -p 3721 code@192.168.91.128

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、安装openssh
  • 2、查看并修改ssh服务端配置文件
  • 3、sshd服务管理
  • 4、SSH服务任务解决方案
    • 4.1 创建用户并授权
      • 4.2 禁用root登录
        • 4.3 更改SSH默认端口
          • 4.4 重启SSH服务
            • 4.5 远程连接测试
              • 4.6 SSH客户端不验证指纹
                • 4.7 pwgen工具生成用户密码
                • 5、SSH服务补充
                  • 5.1 scp命令
                    • 5.2 移除用户
                    • 6、SSH免密登录
                      • 6.1 SSH认证原理
                        • 6.2 实现
                        相关产品与服务
                        文件存储
                        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档