首页 > 其他分享 >ssh服务

ssh服务

时间:2024-07-01 20:43:41浏览次数:12  
标签:服务 ## data 31 etc ssh root

目录

ssh服务

image-20240701143521217
ssh: secure shell protocol, 22/tcp, 安全的远程登录,实现加密通信,代替传统的 telnet 协议

[root@anolis-31 ~]$whereis ssh
ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
[root@anolis-31 ~]$rpm -qf /usr/bin/ssh
openssh-clients-8.0p1-20.0.1.an8.x86_64

公钥交换原理

客户端:发起链接请求
服务端:返回自己的公钥,以及一个会话ID
客户端:生成密钥对
客户端:用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
客户端:发送加密后的值到服务端,服务端用私钥解密,得到Res
服务端:用解密后的值Res异或会话ID,计算出客户端的公钥

最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
/etc/ssh/sshd_config	服务端配置
/etc/ssh/ssh_config		客户端配置
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub文件中的公钥到客户机的
~/.ssh/known_hosts中。下次连接时,会自动匹配相对应的私钥,不能匹配,将拒绝连接

常用命令,-p端口;-o StrictHostKeyChecking=no禁止首次连接的询问;
ssh [user@]host [COMMAND] [-p port] [-o option]
范例:远程主机运行本地shell脚本
[root@anolis-31 ~]$ssh 10.0.0.41 /bin/bash <echo_hostname.sh
[email protected]'s password:
rocky-41

[root@anolis-31 ~]$ssh 10.0.0.41 'hostname'
[email protected]'s password:
rocky-41

##加单引号,否则报错
[root@anolis-31 ~]$ssh 10.0.0.41 'echo $PS1'
[email protected]'s password:
\e[34;1m[\u@\h \W]$\e[0m
范例:journalctl查看sshd日志
##使用journalctl统计日志,或-f实时刷新
[root@anolis-31 ~]$journalctl  -u sshd --since "2024-06-11" >sshd.log

##后续可以考虑日志定时搜索将多次失败的IP封禁
[root@anolis-31 ~]$grep 'Failed password' sshd.log
6月 28 13:03:22 anolis-31 sshd[29647]: Failed password for root from 10.0.0.41 port 35674 ssh2
6月 28 13:05:55 anolis-31 sshd[29662]: Failed password for root from 10.0.0.41 port 45282 ssh2

范例:scp/rsync命令同步目录
##scp/rsync [options] [user@]host1:/sourcetpath [user@]host2:/destpath
##scp拷贝本机或远程文件,-r 递归复制

##rsync基于增量数据同步,即只复制两方不同的文件
##rsync包,通信两端主机都需要安装rsync,-a 存档模式什么都有;-v进度;
##--delete 源数据删除,目标数据也自动同步删除
##rsync  -av /etc   server1:/tmp/ #复制目录和目录下文件
##rsync  -av /etc/ server1:/tmp/ #只复制目录下文件

##31、41创建目录
[root@anolis-31 ~]$mkdir /data
[root@anolis-31 ~]$cp -a /etc /data/
[root@anolis-31 ~]$ll /data/etc/ -rt --time-style=long-iso | tail -1
-rw-r--r--   1 root root  14559 2024-06-28 10:48 ld.so.cache
[root@rocky-41 ~]$mkdir /data

##31同步,同步后查看对应文件,文件时间都一样
[root@anolis-31 ~]$rsync -a /data/ 10.0.0.41:/data
[email protected]'s password:
[root@rocky-41 ~]$ll /data/etc/ -rt --time-style=long-iso | tail -1
-rw-r--r--  1 root root  14559 2024-06-28 10:48 ld.so.cache

##修改文件后同步
[root@anolis-31 ~]$mv /data/etc/ld.so.cache /data/etc/ld.so.cache.mod
[root@anolis-31 ~]$rsync -a /data/ 10.0.0.41:/data
[email protected]'s password:
##41出现两个文件,没有加--delete增量同步
[root@rocky-41 ~]$ll /data/etc/ld.so.cache*
-rw-r--r-- 1 root root 14559 Jun 28  2024 /data/etc/ld.so.cache
-rw-r--r-- 1 root root 14559 Jun 28  2024 /data/etc/ld.so.cache.mod

##-v显示详细信息,--delete源目录无,则删除,保证一致性,可看到本次增量同步
[root@anolis-31 ~]$rsync -av --delete /data/ 10.0.0.41:/data
[email protected]'s password:
sending incremental file list
deleting etc/ld.so.cache
etc/hostname.conf

sent 26,785 bytes  received 311 bytes  10,838.40 bytes/sec
total size is 25,044,413  speedup is 924.28

##41进行验证
[root@rocky-41 ~]$ll /data/etc/ld.so.cache*
-rw-r--r-- 1 root root 14559 Jun 28  2024 /data/etc/ld.so.cache.mod


范例:手动ssh实现局域网key验证
##背景:实现将局域网10.0.0.31、41、43,使用root账户能直接ssh登录,不需要任何交互,便于后续自动化运维脚本的执行。
##原理:将公私钥和登录权限文件共享给指定用户root的ssh目录。

##ssh客户端配置修改首次登录不提醒,31、41、43都修改
##新增一项
[root@anolis31 ~]$sed -i.bak '/StrictHostKeyChecking/a\StrictHostKeyChecking no' /etc/ssh/ssh_config
[root@anolis31 ~]$grep StrictHostKeyChecking /etc/ssh/ssh_config
#   StrictHostKeyChecking ask
StrictHostKeyChecking no

##sshd服务端配置修改key验证,31、41、43都修改
[root@anolis31 ~]$sed -i.bak 's/#PubkeyAuthentication/PubkeyAuthentication/' /etc/ssh/sshd_config
##可以考虑将密码验证关闭
[root@anolis31 ~]$grep '^PasswordAuthentication' /etc/ssh/sshd_config
PasswordAuthentication yes

##在31生成共用的公私钥的密码文件
##直接回车默认路径默认文件空密码
[root@anolis31 ~]$cd .ssh/
[root@anolis31 .ssh]$ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:c84smyLygn162AWMGgsYSaxYr3x7CSCr1SO2ailzY/Q root@anolis31
The key's randomart image is:
+---[RSA 3072]----+
|oo               |
|o..              |
|+o +             |
|B o +            |
|.B + .  S .      |
|+ B = .  *       |
|.*.B = .. +      |
|=oX E +  +       |
|+=.O.o .o        |
+----[SHA256]-----+

##将公钥写入到管理密码登录权限的文件(authorized_keys)
[root@anolis31 .ssh]$cat id_rsa.pub >> authorized_keys

##只要把三个文件(id_rsa、id_rsa.pub、authorized_keys),私钥公钥和密码登录文件拷贝即可,首次需要输入密码,以后就不需要了
[root@anolis31 .ssh]$scp * 10.0.0.41:/root/.ssh/
[root@anolis31 .ssh]$scp * 10.0.0.43:/root/.ssh/

范例:脚本实现ssh局域网key验证

[root@rocky31 ~]$cat ssh_all.sh

#!/bin/bash
set -o nounset
set -o errexit

ssh_password=123456
ip_list="
10.0.0.41
10.0.0.43
"

##打开本机key验证
(grep -q "^#PubkeyAuthentication yes" /etc/ssh/sshd_config) && (sed -i.bak 's/#PubkeyAuthentication/PubkeyAuthentication/' /etc/ssh/sshd_config)
##关闭本机初次登录提醒
sed -i.bak '/StrictHostKeyChecking/a\StrictHostKeyChecking no' /etc/ssh/ssh_config

##判断是否生成公私钥,是否生成密码文件
[ ! -f /root/.ssh/id_rsa ] && ssh-keygen -P "" -f ~/.ssh/id_rsa &>/dev/null

##id_rsa.pub文件生成较慢,等待30秒
try_time=1
while [ ! -f /root/.ssh/id_rsa.pub ];do
	sleep 10
	echo "hello"
	if [ $try_time -ge 3 ];then
		echo "id_rsa.pub文件未创建"
		exit 1
	fi
	((try_time++))
done

[ ! -f /root/.ssh/authorized_keys ] && cat /root/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys

##Expect是一个自动化交互式应用程序的工具,无则安装
rpm -q expect &> /dev/null || yum -y -q install expect &> /dev/null

##读ip列表,进行公私钥及密码文件拷贝
for ip in $ip_list;do
{

##调用expect
expect<<EOF
##set设置超时
set timeout 10
##spawn启动一个新进程,同步root的.ssh目录下文件
spawn rsync -a --delete /root/.ssh/ $ip:/root/.ssh
##如果看到yes/no字符串,输入yes后继续,password则发送密码继续;如果遇到文件结束符eof,退出
expect {
	"yes/no" { send "yes\r";exp_continue }
	"password:" { send "$ssh_password\r"}
}
expect eof
EOF

##打开key验证
(grep -q "^#PubkeyAuthentication yes" /etc/ssh/sshd_config) && (sed -i.bak 's/#PubkeyAuthentication/PubkeyAuthentication/' /etc/ssh/sshd_config)

echo "$ip is done"

##&后台并行执行
}&
done

wait
echo "all done"
 

标签:服务,##,data,31,etc,ssh,root
From: https://www.cnblogs.com/szlhwei/p/18278800

相关文章

  • Windows Server 2016 搭建VPN服务
    ......
  • 博客建站2 - 选择网站服务器
    1.本网站的系统架构2.是否需要购买服务器3.如何选择服务器3.1.确定需求3.2.云服务提供商3.2.1.国内与海外3.2.2.国内的服务器供应商3.3.服务器类型3.3.1.共享主机3.3.2.虚拟私有服务器(VPS)3.3.3.云服务器3.3.4.个人建议3.4.服务器位置3.5.选择......
  • 【服务器】推荐
    雨云服务器测评选择一款性能稳定、价格合理的云服务器对于企业和个人开发者来说至关重要。雨云服务器作为市场上的新兴服务商,提供了一系列吸引人的优惠和强大的功能。本文将从用户的角度,客观评测雨云服务器的性能、易用性和性价比。新用户优惠注册地址:雨云注册额外福利免......
  • .net 8项目通过Autofac获取程序集服务并注册
    首先新建一个AutofacModuleRegister类并继承Autofac.Module。publicclassAutofacModuleRegister:Autofac.Module{protectedoverridevoidLoad(ContainerBuilderbuilder){varbasePath=AppContext.BaseDirectory;varservicesDll......
  • 生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)
    前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式和非抢占模式。这里我会一一展开说具体怎么配置一、双节点均部署Nginx:第一步:上传安装包到/usr/local/第二步:安装编译依赖(使用普通用户需要家sudo)yuminstallgccgcc-c......
  • 苹果内购的凭证验证和解密(前端和本地node服务)
    苹果内购的凭证验证和解密最近在搞苹果内购,是使用微信提供的Dount提供的小程序转成APP。苹果内购使用的也是他们封装好的js接口,然后后端在解析我传递的支付凭证的时候他一直解析不成功然后我坚信自己的传递参数没有问题,我就自己使用node写了一个本地服务去验证我的支付凭证......
  • Kindle 终止中国在线服务 用户如何继续使用推送服务
    2024年6月30日,根据亚马逊公告Kindle中国电子书店正式停止云端下载服务。即日起,未下载的电子书将无法下载和阅读,用户也无法从应用商店下载KindleAPP,同时,Kindle客户服务也将停止支持。虽然Kindle中国服务停止,但用户仍可以通过切换到美区和其他地区的亚马逊账号来继续......
  • 基于k8s实现微服务开发平台的高可用方案设计与实现
    一、项目介绍  基于k8s实现微服务高可用平台的高可用平台的系统通过对Web应用服务器运行情况的分析统计系统的建设以实现服务器运行数据监控与分析功能。微服务高可用平台是web应用高可用的核心,为了确保这些网站的稳定运行,势必需要做好对网站服务器的监控。做好对服务......
  • sourcetree使用ssh拉取代码报错?看下是不是ssh客户端的问题以及相应的解决方案看这里~~
    相信很多软件开发的同学都很熟悉sourcetree,如果也有同学在使用过程中出现ssh拉取代码出现如下报错的问题这里比较头疼的是没法交互输入y确认缓存秘钥。Theserver'shostkeyisnotcachedintheregistry.Youhavenoguaranteethattheserveristhecomputeryouthi......
  • 【Linux命令详解 - ssh命令】 ssh命令用于远程登录到其他计算机,实现安全的远程管理
    文章标题简介一,参数列表二,使用介绍*1\.连接远程服务器2.使用SSH密钥登录*2.1生成密钥对2.2将公钥复制到远程服务器3.端口转发*3.1本地端口转发3.2远程端口转发4.X11转发5.文件传输与远程命令执行*5.1文件传输*5.1.1从本地向远程......