Linux网络-ssh远程连接协议

news/发布时间2024/5/18 19:37:51

SSH基础

1.ssh协议概述

  • SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能;
  • SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令;
  • SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
  • SSH使用传输层TCP协议的22号端口。

SSH客户端<--------------网络---------------->SSH服务端

2.ssh协议优点

  • 数据传输是加密的,可以防止信息泄露
  • 数据传输是压缩的,可以提高传输速度

3.ssh服务的最佳实践

  • 建议使用非默认端口 22
  • 禁止使用protocol version 1
  • 限制可登录用户 白名单
  • 设定空闲会话超时时长
  • 利用防火墙设置ssh访问策略
  • 仅监听特定的IP地址 公网 内网
  • 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
  • 使用基于密钥的认证
  • 禁止使用空密码
  • 禁止root用户直接登录
  • 限制ssh的访问频度和并发在线数
  • 经常分析日志 分离

4.Openssh
penSSH 是 SSH 协议的免费开源实现。是 Centos7 上自带的软件,帮助我们实现远程连接。OpenSSH 常用配置文件有两个 /etc/ssh/ssh_config 和 /etc/ssh/sshd_config 。


客户端相关信息

  • 客户端主程序 :/usr/bin/ssh
  • 客户端配置文件:/etc/ssh/ssh_config

服务端相关信息

  • 服务端主程序:/usr/sbin/sshd
  • 服务端配置文件:/etc/ssh/sshd_config

密钥的存放位置:

  • 自己的密钥:/etc/ssh/
  • 其他人的密钥:~/.ssh/known_hosts

SSH原理

通过公钥加密,再通过私钥解密

1.ssh第一次通信的原理

  • 客户端(Client)首先发起连接请求给服务端(Server);
  • Server收到请求后,将自己的公钥,以及一个会话ID发给Client(这一步客户端得到服务端公钥);
  • Client生成密钥对;
  • Client用自己的公钥异或会话ID,计算出一个值Res,并用Server的公钥加密;
  • Client发送加密后的值到服务端,Server用私钥解密,得到Res;
  • Server用解密后的值Res异或会话ID,计算出Client的公钥(这一步服务端得到客户端公钥);
  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

2.命令格式

点击查看代码
1. ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,
当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh  IP,端口默认即可;
如果端口不是默认的情况下,需要使用-p 指定端口。2. ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p: -p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)3. ssh -t 跳板连接4. ssh  ip  后面直接跟上命令
[root@localhost ~]# ssh 192.168.91.101 ifconfig 

3.known_hosts文件
known_hosts是Linux系统中一个存储已知主机公钥的文件,用于SSH客户端验证远程主机的身份。当你连接到远程主机时,SSH客户端会检査该主机的公钥是否存在于 known_hosts文件中,以确保你连接到的是正确的主机而不是恶意主机。
known_hosts文件的路径通常在用户的家目录下的.ssh文件夹内,文件名为known_hosts,即 ~/.ssh/known_hosts。每个记录包含主机名、公钥、算法等信息以及用于验证主机的指纹。当你首次连接到一个新的远程主机时,SSH会将该主机的公钥添加到known_hosts文件中。如果主机公钥发生变化,SSH会发出警告,因为这可能意味着连接到了不安全的主机。

点击查看代码
思考:有台服务器年久失修,换了一台新的服务器,依旧使用旧机器的ip地址,现在ssh远程连接失败是为什么?怎么解决?
以旧换新需要重新发送密钥。删除之前服务器的公钥rm-rf  known_hosts ,重新获取公钥。

sshd客户端配置

客户端配置文件位置:/etc/ssh/ssh_config

客户端首次连接服务端时,系统询问是否交换公钥,进行安全确认。这是由客户端配置文件默认的,可以修改配置文件ssh_config取消询问。

点击查看代码
[root@localhost ~]#  vim /etc/ssh/ssh_config        #修改客户端配置文件
#   StrictHostKeyChecking askStrictHostKeyChecking no     #取消注释,并将ask改成no,则首次连接时,系统不会进行确认询问注意:这种做法只在内网中使用,如果服务器暴露在外网中,不建议这样操作,非常危险。

sshd服务端配置

服务端配置文件位置:/etc/ssh/sshd_config
1.常用配置项

点击查看代码
[root@localhost ~]#  cat -n  /etc/ssh/sshd_config
--------------------17	#Port 22                   //端口号,生产环境建议修改端口号18	#AddressFamily any19	#ListenAddress 0.0.0.0     //监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址。20	#ListenAddress ::37	#LoginGraceTime 2m         //用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒38	#PermitRootLogin yes       //是否允许root用户登录,ubantu不允许root远程ssh登录39	#StrictModes yes           //#检查.ssh/文件的所有者,权限等40	#MaxAuthTries 6            //最多允许输错几次密码(centos7默认3次,修改也无效)41	#MaxSessions 10            //同一时间最多允许10个远程连接65	PasswordAuthentication yes   //基于key验证68	#ChallengeResponseAuthentication yes       //是否允许空密码用户登录69	ChallengeResponseAuthentication no         //基于用户和密码验证115	#UseDNS no                 //禁用反向解析,提高速度可设置为no#以下可以限制可登录用户的办法:白名单  黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
如果不设置白名单,则所有用户都可以登录访问。一旦设置了白名单,那么只有白名单内的用户可以访问。

2.实际操作
修改默认端口

点击查看代码
[root@node2 ~]#  vim  /etc/ssh/sshd_config        //编辑服务端配置文件
Port 9527   //修改端口号为9527
[root@node2 ~]#  systemctl restart sshd           //重启服务[root@localhost ~]#  ssh 172.16.235.100 -p 9527   //在客户端进行远程连接
root@172.16.235.100's password: 
Last login: Mon Apr 29 20:30:57 2024 from 172.16.235.1   //连接成功

禁止root用户登录

点击查看代码
[root@node2 ~]#  vim  /etc/ssh/sshd_config       //编辑服务端配置文件
PermitRootLogin no   //改为no,不允许root登录
[root@node2 ~]#  systemctl restart sshd          //重启服务[root@localhost ~]#  ssh 172.16.235.100 -p 9527  //在客户端进行远程连接
root@172.16.235.100's password: 
Permission denied, please try again.
root@172.16.235.100's password: 
Permission denied, please try again.
root@172.16.235.100's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).  //连接失败注意!!!虽然阻止了root,但是普通用户可以使用su root 进行远程连接。
[root@localhost ~]#  ssh lisi@172.16.235.100 -p 9527   //lisi为远程主机用户
lisi@172.16.235.100's password: 
Last failed login: Mon Apr 29 21:11:53 CST 2024 from 172.16.235.55 on ssh:notty
[lisi@node2 ~]$ su root
密码:
[root@node2 lisi]# 怎样解决来提高安全性呢?修改服务端的pam认证模块!
[root@node2 ~]#  vim /etc/pam.d/su                      //编辑pam配置文件
6 auth            required        pam_wheel.so use_uid  //开启第六行[root@localhost ~]#  ssh lisi@172.16.235.100 -p 9527    //在客户端进行远程连接
lisi@172.16.235.100's password: 
Last login: Mon Apr 29 21:13:26 2024 from 172.16.235.55
[lisi@node2 ~]$ su root
密码:
su: 拒绝权限                                        //无法使用su root连接服务端
[lisi@node2 ~]$ 
![](https://img2024.cnblogs.com/blog/3396297/202405/3396297-20240505013529674-1062879601.png)

白名单黑名单列表

点击查看代码
1.设置白名单
[root@node2 ~]#  vim /etc/ssh/sshd_config
AllowUsers zhangsan@172.16.235.55  lisi
只允许 172.16.235.55 登录我的张三 ; 任何人可以登录我的lisi
[root@node2 ~]#  systemctl restart sshd用服务端1(172.16.235.10)进行测试:
[root@node1 ~]# ssh zhangsan@172.16.235.100 -p 9527   //远程登录到zhangsan
zhangsan@172.16.235.100's password: 
Permission denied, please try again.
zhangsan@172.16.235.100's password: 
Permission denied, please try again.
zhangsan@172.16.235.100's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).  //登录失败
[root@node1 ~]# ssh lisi@172.16.235.100 -p 9527           //远程登录到lisi
lisi@172.16.235.100's password: 
Last login: Mon Apr 29 21:21:23 2024 from 172.16.235.55   
[lisi@node2 ~]$                                           //登录成功用服务端2(172.16.235.55)进行测试:
[root@localhost ~]#  ssh zhangsan@172.16.235.100 -p 9527  //远程登录到zhangsan
zhangsan@172.16.235.100's password: 
Last login: Mon Apr 29 21:40:18 2024 from 172.16.235.55   
[zhangsan@node2 ~]$                                       //登录成功2.设置黑名单
DenyUsers  liwu@192.168.91.100    //只拒绝192.168.91.100登录服务器的liwu用户
注意!市场环境中先备份配置文件,再做修改!

免密登录

1.使用密钥对及免交互验证登录
客户端如果想免密登录,进行两步操作即可:

第一步:生成密钥
第二步:传密钥给对方
实验步骤:

1.客户端使用命令 ssh-keygen 生成密钥(默认使用rsa算法);

点击查看代码
[root@localhost ~]#  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:aA9uuLdOnvTs1DuT3lDcrveeU9bT1OAyZDXp3ABgbpg root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|          o..oo. |
|         =  o +. |
|        E oo + +.|
|       . . .o.+ +|
|      + S   oo..o|
|     + o . . . .=|
|    . = o o.  ..o|
|     *.=  ++ ....|
|    .o=o+.ooo. ++|
+----[SHA256]-----+
![](https://img2024.cnblogs.com/blog/3396297/202405/3396297-20240505013751948-1990197422.png)

2.使用命令 ssh-copy-id -i 自己密钥文件 对方地址 将客户端的公钥文件拷贝到服务端(注意路径不要写错);

点击查看代码
[root@localhost ~]#  cd /root/.ssh
[root@localhost .ssh]#  ls   // 家目录 ~/.ssh/ 下会生成两个密钥文件,一个公钥一个私钥,.pub结尾的是公钥
id_rsa  id_rsa.pub  known_hosts
[root@localhost .ssh]#  ssh-copy-id -i id_rsa.pub 172.16.235.100   //将密钥拷贝到服务端(注意端口号)
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.235.100's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh '172.16.235.100'"
and check to make sure that only the key(s) you wanted were added.
![](https://img2024.cnblogs.com/blog/3396297/202405/3396297-20240505013819624-1107970514.png)

3.测试远程连接服务端时,是否免密码。

点击查看代码
[root@localhost .ssh]#  ssh 172.16.235.100         //远程登录到服务端
Last login: Mon Apr 29 22:29:53 2024 from 172.16.235.1
[root@node2 ~]#                                    //免密登录
![](https://img2024.cnblogs.com/blog/3396297/202405/3396297-20240505014040207-1253334424.png)

2.同网段主机免密登录脚本
生产环境中,多台主机间想要免密登录,可以供用密钥

点击查看代码
[root@localhost ~]#  cd /data
[root@localhost data]#  vim ssh_log.sh  //编写免密登录脚本#!/bin/bash
PASS=123123    //密码自行修改
#设置网段最后的地址,4-255之间,越小扫描越快
END=254IP=`ip a s ens33 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.rm -f /root/.ssh/id_rsa
[ -e ./SCANIP.log ] && rm -f SCANIP.log
for((i=3;i<="$END";i++));do
ping -c 1 -w 1  ${NET}$i &> /dev/null  && echo "${NET}$i" >> SCANIP.log &
done
waitssh-keygen -P "" -f /root/.ssh/id_rsa
rpm -q sshpass || yum -y install sshpass
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IPAliveIP=(`cat SCANIP.log`)
for n in ${AliveIP[*]};do
sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}:
done

轻量级自动化运维工具pssh

pssh基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具。

点击查看代码
yum install epel-release.noarch -y  #推荐安装方式[root@ky15-1 yum.repos.d]#yum clean all
#清除缓存
[root@ky15-1 yum.repos.d]# pssh
[root@ky15-1 yum.repos.d]# ssh-keygen 
#一路回车
[root@ky15-1 yum.repos.d]# ssh-copy-id 192.168.91.102
[root@ky15-1 yum.repos.d]# ssh-copy-id 192.168.91.105
#上传秘钥对
[root@ky15-1 yum.repos.d]# pssh -H 192.168.91.102 hostname -i
[1] 02:10:10 [SUCCESS] 192.168.91.102#管理多台,写入一个文件
[root@ky15-1 yum.repos.d]#vim hosts.txt
[root@ky15-1 yum.repos.d]#cat hosts.txt 
10.0.0.8
10.0.0.6[root@ky15-1 yum.repos.d]#pssh -i -h hosts.txt   hostname  //注意-i写在前面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/32033004.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Mysql数据库备份及恢复

mysqldump -uroot -p******** test > test.sql备份test数据库到当前目录 mysqldump -uroot -pAbc123*** -t test > test1.sql也就是备份test数据库中的插入数据,如图所示:这样的备份不能在新的数据库中恢复,只能在原库恢复. mysqldump -uroot -pAbc123*** -d test >…

Raven-2-WordPress-UDF提权

0x00 什么是UDF UDF 全称为:User Defined Function,意为用户自定义函数;用户可以添加自定义的新函数到Mysql中,以达到功能的扩充,调用方式与一般系统自带的函数相同,例如 contact(),user(),version()等函数。 udf 文件后缀一般为 dll,由C、C++编写。 0x01 UDF在渗透中…

Laravel-入门指南(全)

Laravel 入门指南(全)原文:zh.annas-archive.org/md5/e93ac8af650aa246eabea26267ef0d7b 译者:飞龙 协议:CC BY-NC-SA 4.0第一章:Laravel 入门 欢迎来到 Laravel 入门。本书专门为您提供了开始使用 Laravel Web 开发框架所需的所有信息。您将学习 Laravel 的基础知识,开…

金汇龙王战神程序智慧管家app拨号精灵下载说明

金汇战神程序App下载,龙王程序app,智慧管家下载安装 厂家售后使用说明及安装教程:金汇战神系金汇科技出品战神程序,无区域限制,高性价比高,调试安装更加快捷方便,安装时间大大缩短。添加微心 ZSMJCC 咨询索取金汇相关App下载链接 手机上安装好金汇战神小精灵app后,连接上…

PS通过AXI-LITE配置PL端输入

第一步:根据需要配置的参数数量配置一个AXI-LITE IP 包括:输出端口,内部控制信号等。 第二步:在配置过程中为IP设置存储的位置 第三步:在PS中约定把数据写入该地址的方法: 例如:https://www.cnblogs.com/VerweileDoch/p/18080046 第四步:输出参数并且使用

linux23-网络传输

linux23-网络传输使用ping检查服务器是否连通使用wget下载文件使用curl发起网络请求ping ping [-c num] ip或主机名-c 检查次数, 不使用-c选项会无限次数持续价差参数: 被检查的服务器IP地址或主机名地址检查baidu.com是否联通 ping baidu.com检查baidu.com是否联通, 检查三次 …