ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

    • Linux基础

    • Linux服务

      • Rsync文件传输
      • Sersync实时同步
      • NFS文件服务
      • SSH远程连接
        • 远程管理服务
        • SSH远程连接方式
        • SSH远程连接方式
        • SSH服务相关命令
        • 编写脚本批量分发公钥
        • SSH服务的配置文件
      • Keepalived高可用
      • Supervospr进程管理
      • APT包管理工具
      • Samba文件共享
      • JumpServer堡垒机
      • Linux搭建DNS服务
      • Tmux终端管理
      • Iptables
      • Firewalld防火墙管理
      • OpenVPN代理
      • 本地yum仓库搭建
    • Windows Server笔记

    • Shell笔记

    • Ansible笔记

  • 虚拟化服务

  • 数据库服务

  • 监控服务

  • Web服务

  • 数据处理

  • Ops
  • 操作系统
  • Linux服务
Hoshinozora
2024-03-14
目录

SSH远程连接

# 远程管理服务

# SSH

SSH即安全外壳协议(Secure Shell Protocol),他是一种安全的、数据信息加密的远程连接协议,一般作为Linux系统默认的远程连接方式。

Shell的概念如下:

  • 每次连接登录一个Linux系统,就是一个Shell。
  • 一个Linux系统可以被多个Shell会话同时连接。
  • 使用Shell切换用户,同等于登录一个新Shell。
  • 每个Shell中配置的变量,不会影响其他Shell。
  • 配置Shell的命令行界面 如主机名,需要切换Shell,使用bash命令同等于再次连接Shell。

# TELNET

TELNET相较于SSH来说,是一种不安全的远程连接协议,它的所有数据信息包括密码都是明文的,一般仅用于内网调试网络设备,或者测试端口是否能连通。

# 中间人攻击

所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据。

别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”这种方式的攻击。

# SSH协议的优点

通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。

使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。

SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。

# SSH远程连接方式

# SSH服务相关文件位置

SSH服务器密钥保存位置:/etc/ssh/,没有后缀代表私钥,.pub后缀代表公钥。

SSH客户端公钥保存位置:~/known_hosts。

# 私钥与公钥作用

私钥与公钥用于数据传输前后对信息进行加密解密处理,利用公钥和私钥进行用户身份认证。

# 密码连接原理

  1. SSH客户端执行连接命令,请求建立远程连接。

    ssh -p [端口号] [IP地址]

    不设置用户名时,默认以客户端当前登录用户名登录。

  2. 三次握手。

    SSH客户端发送TCP连接请求,客户端和服务端通过三次握手建立TCP连接。

  3. SSH版本协商。

    服务端返回版本信息给客户端,然后客户端也会返回版本信息给服务端,双方通过版本协商确定使用的版本。

  4. 密钥交换。

    1. 服务端会先生成一对密钥对(公钥A、私钥B)。

    2. 然后服务端以明文形式将公钥A发送给客户端。

    3. SSH客户端询问用户是否保存该公钥。

      • 由于是明文传输的,所以可能遭到中间人攻击,所以会提示是否信任这个公钥。

      • 如果确认,则客户端会保存该公钥到~/known_hosts文件中。

    4. SSH客户端生成一个会话密钥C,并使用公钥A进行加密然后发送给服务端。

    5. SSH服务端收到后,使用秘钥B对收到的信息进行解密得到密钥C。

  5. 认证阶段。

    1. 客户端使用密钥C对账号密码进行加密,然后发送给服务端。
  1. 服务端收到后,会使用密钥C进行解密,得到用户的账号密码。

  2. 验证完毕后,服务端使用密钥C对认证结果进行加密,然后发送给客户端。

  1. 数据通信阶段。

    1. 客户端发送信息使用密钥C进行加密,解密信息也使用密钥C。

    2. 服务端发送信息也是使用密钥C进行加密,解密信息也使用密钥C。

# 秘钥连接

image-20240314172454849

  1. SSH客户端创建密钥对。
    • 私钥需要服务器自己安全保存,公钥需要分发给客户端。
    • 生成密钥对命令ssh-keygen -t [加密方式],默认会保存在提示的目录中。
  • SSH客户端使用口令方式建立远程连接分发公钥到服务端。

    • ssh-copy-id -i [公钥路径] [用户名]@[远程主机IP地址]
  • SSH客户端请求使用秘钥建立远程连接,同时将公钥带上。

    • ssh [远程主机IP地址]
  • SSH服务端收到之后,会查找对应登录账号的家目录下是否有该公钥,如果没有则直接登录失败,如果有则下一步。

  • SSH服务端使用公钥加密一个随机字符串发送给客户端进行质询。

  • SSH客户端使用私钥进行解密,并将解密结果返回给服务端。

  • SSH服务端收到后验证质询结果是否正确,如果正确,则远程管理连接建立成功。

# SSH远程连接方式

# 基于口令方式进行远程连接

ssh -p 22 [用户名]@[远程主机IP地址]

  • 不设置用户名时,默认以客户端当前登录用户名登录。

# 基于证书方式进行远程连接

使用密钥进行认证登录连接,更加安全,以文件进行登录。公钥和私钥可以完成身份认证工作。

# SSH服务相关命令

# ssh

  • 口令方式登录:ssh -p 22 [用户名]@[远程主机IP地址]

    • 不设置用户名,时默认以客户端当前登录用户名登录
  • 证书方式登录:ssh [远程主机IP地址] [命令]

    • 直接使用ssh进行远程主机命令执行,无需输入账号密码,在证书中有写。

# ssh-keygen

ssh-keygen -t [加密方式]

  • 生成密钥对,默认会保存在提示的目录中。

  • SSH1只支持RSA加密方式,为了保证兼容性可以使用此方式。

  • SSH2支持所有加密方式。

# ssh-copy-id

ssh-copy-id -i [公钥路径] [用户名]@[远程主机IP地址]

  • 分发公钥到指定主机的指定用户家目录的~/.ssh/authorized_keys文件中。

# sshpass

sshpass -p [密码] [ssh相关命令语句]

  • 使能够以参数方式输入密码,例如:sshpass -p [密码] ssh-copy-id ...

# scp

scp -rp [本地文件] [用户名]@[远程主机IP地址]:[远程保存路径]

  • 基于SSH的远程传输,可使用密匙进行认证。

# sftp

sftp [参数] [目标主机IP地址]

  • 基于SSH的远程文件管理,可使用密匙进行认证。
  • 连接后可以使用如下命令进行操作:
    • pwd 查看远程主机当前目录
    • ls 查看远程主机文件
    • cd 切换远程主机目录
    • lcd 切换本地主机目录
    • rm 删除远程主机文件
    • get 下载远程主机文件到本地
    • put 上传本地文件到远程主机
    • bye 退出sftp连接

# 编写脚本批量分发公钥

# for循环

  • for 变量名 in 迭代对象 do 循环的命令 done

# 也可以用来进行串行批量管理 - 如利用ssh进行安装软件等

  • 第一个参数是$1,第二个参数是$2,第三个......
  • 可以使用""防止一个命令因为空格变成多个参数
  • ssh $IP $1
  • 串行批量管理 - 一台一台的执行管理

# IP如何输入

  • for IP in {31,41} -- 使用{}进行迭代

  • for IP in cat ./HostIP.txt

    • 将所有IP写在一个文本中 将文本作为迭代对象

# 免交互输入密码信息

  • 管理端安装 yum install -y sshpass
  • sshpass -p [密码] [ssh命令语句]

# 免确认YES和NO信息

  • 使用ssh参数 使其不要询问 一切都是YES
  • ssh -o "StrictHostKeyChecking=no"

# 指定端口号信息

  • 使用ssh-copy-id参数
  • ssh-copy-id -p [指定端口号]

# SSH服务的配置文件

配置文件位置:/etc/ssh/sshd_config

  • 文件内容中注释表示默认配置。

# 常用

PasswordAuthentication no

  • 是否启用密码登录

PermitEmptyPasswords no

  • 是否允许远程用户使用空密码登录

PermitRootLogin no

  • 是否允许远程使用root用户登录

Port 22

  • SSH服务端口号

ListenAddress 0.0.0.0

  • 指定监听地址,用来限制连接网段,连接相关尽量别改需要重启网卡。
  • 指定监听地址只能是本地网卡上的地址,也就是ip address命令里的地址。
  • 也可以使用0.0.0.0代表监听所有网段或主机。

# 其他

GSSAPIAuthentication no

  • 是否开启GSSAPI认证功能
  • 一般不用 会影响连接速度 所以最好关闭

UseDNS no

  • 是否开启反向DNS解析功能

    • 连接慢时 最好关闭 开启会影响连接速度

PubkeyAuthentication yes

  • 是否启用秘钥登录

RSAAuthentication yes

  • 是否启用RSA认证
#Linux#SSH#远程管理服务
NFS文件服务
Keepalived高可用

← NFS文件服务 Keepalived高可用→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式