sshd服务

17 篇文章 1 订阅

Linux安装sshd

sshd命令 是openssh软件套件中的服务器守护进程

 # ubuntu/debian安装ssh
sudo apt install ssh openssh-server
 
# Centos安装ssh
sudo yum install openssh-server -y

# 启动sshd并设置sshd开机自启
sudo systemctl enable --now sshd

# 单独安装ssh-client
yum install openssh-clients -y
apt install openssh-client -y
dnf install openssh-clients -y

openssh套件提供交互算法使用的素数模数(/etc/ssh/moduli),生成主机认证公私密钥的工具(/usr/bin/ssh- keygen)


调整SELinux和防火墙策略

请勿照搬

# 永久关闭SELinux
# 修改SELinux的配置为disabled
vi /etc/selinux/config
## 将SELINUX=enforcing改为SELINUX=disabled

# 关闭SELinux
setenforce 0

# 清空防火墙策略(非必须)
iptables -F

# 启动sshd并设置sshd开机自启
sudo systemctl enable --now sshd

# 查看ssh服务是否启动
ps -ef|findstr sshd

## 需要依赖grep
ps -ef|grep sshd 
 
# A和B分别测试下可用性
ssh localhost

Windows安装sshd服务

Win32-openssh项目:https://github.com/PowerShell/Win32-OpenSSH


手动安装openssh

参考:https://github.com/Dream4ever/Knowledge-Base/issues/84
先去Releases页面下载最新版本的OpenSSH,注意要下载64位版本的,并将压缩包里的文件解压至C:\Program Files\OpenSSH目录下

# 执行安装脚本
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

# windows防火墙放行22端口
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

# 启动sshd服务
net start sshd

# 设置sshd服务自动启动
Set-Service sshd -StartupType Automatic

choco安装openssh

安装openssh套件ssh-copy-id

# 安装openssh和ssh-copy-id
choco install openssh ssh-copy-id -y

启动sshd服务

# 进入sshd目录
cd "C:\Program Files\OpenSSH-Win64"

# 执行install-sshd.ps1脚本
.\install-sshd.ps1

# 重启sshd服务
Restart-Service sshd

# 重启ssh-agent服务(ssh认证服务)
Restart-Service ssh-agent

# 将sshd服务设置开机自启动
Set-Service -Name sshd -StartupType Automatic

# 将ssh-agent服务设置开机自启动
Set-Service -Name ssh-agent -StartupType Automatic

# 查看sshd服务
Get-Service sshd

# 查看ssh认证服务
Get-Service ssh-agent

在这里插入图片描述


查看22端口是否处于监听状态

# 查看22端口是否处于监听状态
netstat -ano|findstr 22
netstat -ano|grep 22

# telnet测试本地22端口是开放
telnet 127.0.0.1 22

配置Win10的sshd服务–(必须配置)

sshd的配置文件在C:\ProgramData\ssh\sshd_config

vim C:\ProgramData\ssh\sshd_config

# 允许密钥登录
PubkeyAuthentication yes

# 指定授权密钥文件
# AuthorizedKeysFile  .ssh/authorized_keys

# 密码认证(需要将默认的yes改为no,才能密钥登录)
PasswordAuthentication no

必须要注释文件最后几行

 #Match Group administrators
       #AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

在这里插入图片描述

修改完配置一定要重启sshd服务

# 重启sshd服务
Restart-Service sshd

# 重启ssh认证服务
Restart-Service ssh-agent

设置ssh登录后默认的shell

设置ssh登录后的shell的主目录

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "/c" -PropertyType String -Force

设置ssh登录后的shellpowershell

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

设置ssh登录后的shellpwsh7

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force

设置ssh登录后的shellmsysbash

# 先安装cmder--必须
choco install cmder -y

# 设置shell
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\tools\msys64\usr\bin\bash.exe" -PropertyType String -Force

在这里插入图片描述


配置ssh密钥免密登录

https://blog.csdn.net/omaidb/article/details/120028143

# 生成密钥对
ssh-keygen

# 将私钥加载到ssh-agent
ssh-add ~\.ssh\id_rsa

sshd服务器创建authorized_keys文件

Widnows的sshd服务默认没有authorized_keys文件

# 上传私钥到ssh服务器
scp ~\.ssh\id_rsa.pub username@windows服务器ip:~\.ssh\authorized_keys

ssh-copy-id上传公钥到ssh服务器

ssh-copy-id没成功,报错umask问题

# 配置ssh免密登录
ssh-copy-id username@hostip

# ssh登录Windows-sshd服务器
ssh username@windows服务器ip

sshd服务详解

sshd命令 是openssh软件套件中的服务器守护进程。


sshd配置文件

/etc/ssh/ssh_config客户端配置文件
/etc/ssh/sshd_config服务端配置文件

# 编辑sshd配置文件
vim /etc/ssh/sshd_config

只监听IPV4

# 查看AddressFamily配置
grep AddressFamily /etc/ssh/sshd_config

在这里插入图片描述

# 只监听IPv4
AddressFamily inet

在这里插入图片描述


指定ssh协议版本

https://developer.aliyun.com/article/269860

# 指定ssh协议版本为2
Protocol 2

自定义sshd端口

vim /etc/ssh/sshd_config

# 取消sshd_config第17行第注释
Port 3389  # 将22修改为3389

修改完配置后重启sshd服务

# 修改完ssh_config配置,重启sshd服务后配置才会生效
systemctl restart sshd

sshd安全配置


禁止使用密码登陆ssh

# 大约65行 或 78行
## yes打开密钥认证 | no 关闭密钥认证
PasswordAuthentication yes

## yes开启密码认证 | no 关闭密钥认证
PubkeyAuthentication no

##输入密码次数限制 6代表输错六次就退出     
MaxAuthTries 6

修改完配置后重启sshd服务

# 修改完ssh_config配置,重启sshd服务后配置才会生效
systemctl restart sshd

不允许root登录

默认为prohibit-password(没有密码)。建议配置为no,即禁止root远程登录
如果未禁止root账号远程登录,那么攻击者获取到root口令之后就可以从网络上远程登录服务器进行攻击行为,否则只能从服务器机房内部近端登录,可大幅减小攻击面

# 是否允许root登录
## no 禁止root登录
PermitRootLogin no

不允许空密码

# 允许空密码,默认为no。
## 应禁止配置该字段为yes,避免无密码用户登录。
PermitEmptyPasswords no

使用PAM策略

# 使用PAM策略,默认为no。
## PAM策略对用户认证和管理,有登录次数限制,超次锁定用户,到时解锁用户功能。 
## sshd_config的MaxAuthTries仅有登录次数限制。该字段应配置为yes,使用PAM策略,可以起到防暴力破解。
UsePAM no

系统日志设施

该配置表示,可通过rsyslog服务的设施分类规则记录日志。在 /etc/rsyslog.conf已有规则authpriv.* /var/log/secure用于记录安全日志。建议对照该规则配置SyslogFacilityAUTHPRIV, 这样可以记录SSH服务日志,比如用户的认证鉴权日志登入登出日志等,为安全事件提供日志支撑。

# 系统日志设施,默认为AUTH。
SyslogFacility AUTH

# 记录ssh日志到rsyslog
# SyslogFacility AUTHPRIV

忽略Rhosts

Rlogin协议中,Rhosts配置表示授权远程访问,由于Rlogin协议已不安全,所 以应禁止使用Rhosts配置。建议配置为yes

# 忽略Rhosts,默认为yes
IgnoreRhosts yes

指定SSH强加密算法

https://eulixos.com/docs/2.0/SecHarden/%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1.html#%E5%8A%A0%E5%9B%BA-ssh-%E6%9C%8D%E5%8A%A1

推荐:AES-256SHA-512加密算法。

# 列出支持的密码
ssh -Q cipher
# 列出支持的 MAC
ssh -Q mac
# 列出支持的公钥类型
ssh -Q key

# 客户端获取支持密钥交换算法列表
ssh -Q kex

在这里插入图片描述

# 服务端获取支持算法列表
sshd -T | grep kex

在这里插入图片描述

修改/etc/ssh/sshd_config文件,将下列语句直接加到该文件后面
https://www.openssh.com/legacy.html

# 指定`Ciphers`采用强加密算法--SSH数据传输的加密算法
Ciphers aes256-ctr,chacha20-poly1305@openssh.com,aes256-gcm@openssh.com

# 设置SSH数据校验的哈希算法--用于检测流量修改的消息验证码
MACs hmac-sha2-512,hmac-sha2-512-etm@openssh.com

# 用于生成每个连接密钥的密钥交换算法
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

# SSH 服务器接受的公钥算法,用于向 SSH 客户端验证自身身份
# HostkeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa

当然,最后要重启ssh服务才能使配置生效。

# 客户端验证ssh加密算法
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -v  10.0.1.220

ssh登录优化

ssh登录速度慢,可以通过下列配置优化。


判断客户端是否合法-UserDNS

# 使用dns反查客户端的主机名,会导致登陆变慢
UserDNS yes

# 一般内网时设置为no,连接速度会加快
UserDNS no

在sshd服务端上查看ssh客户端的ip

# 在sshd服务端上查看ssh客户端的ip地址
env|grep -i ssh

在这里插入图片描述


-vvv显示登陆详情–debug时使用

https://wangchujiang.com/linux-command/c/sshd.html
ssh客户端debug模式

# debug模式--显示登陆时的所有信息,方便调试诊断
## -v -vv -vvv
ssh -vvv 用户名@服务器地址

ssh系统登录提示

Linux 系统通过 /etc/issue/etc/issue.net/etc/motd 以及 /run/motd.dynamic 来显示登录后的提示信息,通常用于向用户提示系统版本、硬件信息等,

  • /etc/issue/etc/issue.net 通常在未登录终端前显示,
  • /etc/motd/run/motd.dynamic 则是在成功登录终端后显示。
  • 此外还有 /etc/profile/etc/profile.d/,在登录后会运行其中的脚本。

ssh登录后欢迎语

/etc/motd/run/motd.dynamic文件里面保存的是ssh登录后欢迎语

# 插入  你好吗
echo '你好吗'> /etc/motd
# 登陆后会打印 你好吗

在这里插入图片描述


sshd服务无法启动错误排查

可能导致ssh错误的原因:

  • 升级内核
  • 升级sshd服务
  • 配置sshd服务
  • 修改iptables策略
  • 配置hosts.deny
  • 修改内核参数
  • 修改limits.conf
  • 配置SElinux
  • 配置PAM认证机制
  • 系统负载过高
  • 安装第三方安全防护软件

sshd故障排查步骤

分析sshd日志

# 从最后500条日志中过滤sshd关键字
tail -500 /var/log/secure | grep 'sshd'

测试sshd是否可以启动

https://wangchujiang.com/linux-command/c/sshd.html

# 对sshd进行测试,并给出错误提示
sshd -t

调试模式启动sshd

# 调试模式启动sshd
sshd -d

# 详细调试模式启动sshd
sshd -ddd

查看sshd的ssh协议版本

https://developer.aliyun.com/article/269860

# 安装scanssh
## 安装epel源
yum install -y epel-release

## yum安装scanssh
yum install -y scanssh

# 扫描sshd协议版本
## -n 指定ssh服务端的端口
scanssh -s ssh -n 端口 ip或ip段

在这里插入图片描述


sshd常见故障


ssh证书登陆失败

错误提示: ssh Permission denied (publickey)

解决办法参考


ssh启动错误提示:Missing privilege separation directory: /run/sshd

原因分析: openssh-Server的Bug


临时解决办法1:

# 创建缺失的目录
mkdir -p /run/sshd

# 修改权限
chmod -R 0755 /run/sshd
chown -R root:root /run/sshd

解决方法2:

修改配置文件
修改/usr/lib/tmpfiles.d/sshd.conf,修改d /var/run/sshd 0755 rootd /run/sshd 0755 root root
在这里插入图片描述


解决办法3–建议:

升级openssh可以解决此Bug

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值