Linux ssh-keygen系列命令与ssh命令的使用

关联文章

  1. Linux ssh 免密登录配置👍
  2. 对日开发 TeraTerm 批量向各台服务器传输文件
  3. SSH 教程👍👍👍👍👍👍

目录

  • 一. ssh-keygen相关命令
    • 1.1 简介
    • 1.2 生成密钥
    • 1.3 ssh-copy-id 上传公钥到指定的服务器
    • 1.4 服务器的公钥指纹查看
      • 1.4.1 ssh-keyscan 在客户端查看对方服务器的公钥指纹
      • 1.4.2 在服务器端查看公钥指纹
    • 1.5 `-F` 查看指定服务器对应的完整公钥
    • 1.6 `-R` 删除指定服务器对应的公钥
  • 二. ssh命令
    • 2.1 `-v` 查看连接的详细信息
    • 2.2 `-p` 指定端口号
    • 2.3 连接远程服务器的时候执行命令
      • 2.3.1 连接单台服务器时,执行命令
      • 2.3.2 批量连接多台服务器时执行命令


一. ssh-keygen相关命令

1.1 简介

ssh-keygen 是一个用于 创建 SSH 密钥对(公钥和私钥) 的命令行工具,主要用于 SSH 认证。这些密钥可以用来:

  • 无密码地登录远程服务器(通过公钥认证)
  • 对数据进行加密与签名(如 Git 签名等)
  • 管理 known_hosts 文件中主机的指纹

⏹ SSH 密钥对的原理简述

  • 在本地生成密钥对(私钥保存在本地,公钥可以公开)。
  • 把公钥上传到服务器的 ~/.ssh/authorized_keys。
  • 登录服务器时,SSH 客户端用私钥进行身份认证,服务器用你上传的公钥进行验证。

这样就能实现:免密码、安全登录远程主机。

1.2 生成密钥

  • -t ed25519:指定加密算法
  • -C "fengyehong123@example.com"
    • 公钥中会默认使用当前系统的用户名和主机名作为注释
    • 指定给密钥添加注释(通常是邮箱或用户名,方便识别密钥用途)
  • -f ~/.ssh/key:指定密钥输出的位置,会生成以下2个文件
    • ➡️ 私钥:~/.ssh/key
    • ➡️ 公钥:~/.ssh/key.pub
ssh-keygen -t ed25519 -C "fengyehong123@example.com" -f ~/.ssh/key

1.3 ssh-copy-id 上传公钥到指定的服务器

  • 命令执行之后,会把公钥的内容给追加到对方服务器的~/.ssh/authorized_keys文件中
ssh-copy-id -i ~/.ssh/key.pub apluser@172.22.118.28

1.4 服务器的公钥指纹查看

1.4.1 ssh-keyscan 在客户端查看对方服务器的公钥指纹

  • 💥注意:这种方式不能 100% 保证安全(容易被中间人攻击),除非所在的网络环境受到信任
$ ssh-keyscan 172.22.118.28 2>/dev/null | ssh-keygen -lf -
256 SHA256:R6Ra3HpmUF8+MgTj2Rd7guogV2STz1mjLhfIGA7fJB8 172.22.118.28 (ED25519)
3072 SHA256:6zpOXvNpQQZUMevJe+/bSGcySCnqBGZE8p2hoMjPNh0 172.22.118.28 (RSA)
256 SHA256:ZMFgHvPdsZSIuGyEkv1WFgJT3eGjSC4AI/HwTMH4s8o 172.22.118.28 (ECDSA)
  • 指定查看某种加密方式所对应的密钥
$ ssh-keyscan -t ed25519 172.22.118.28 2>/dev/null | ssh-keygen -lf -
256 SHA256:R6Ra3HpmUF8+MgTj2Rd7guogV2STz1mjLhfIGA7fJB8 172.22.118.28 (ED25519)

1.4.2 在服务器端查看公钥指纹

  • 服务器的公钥都保存在/etc/ssh/目录下
apluser@FengYeHong-HP:~$ ls -l /etc/ssh/*.pub
-rw-r--r-- 1 root root 180 May 25 21:45 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r--r-- 1 root root 100 May 25 21:45 /etc/ssh/ssh_host_ed25519_key.pub
-rw-r--r-- 1 root root 572 May 25 21:45 /etc/ssh/ssh_host_rsa_key.pub
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:ZMFgHvPdsZSIuGyEkv1WFgJT3eGjSC4AI/HwTMH4s8o root@FengYeHong-HP (ECDSA)
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:R6Ra3HpmUF8+MgTj2Rd7guogV2STz1mjLhfIGA7fJB8 root@FengYeHong-HP (ED25519)
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
3072 SHA256:6zpOXvNpQQZUMevJe+/bSGcySCnqBGZE8p2hoMjPNh0 root@FengYeHong-HP (RSA)

1.5 -F 查看指定服务器对应的完整公钥

命令显示内容含义
ssh-keygen -F <IP>显示的是完整公钥(Base64)known_hosts 中保存的原始公钥
ssh-keygen -lf ~/.ssh/known_hosts显示的是指纹(SHA256 hash)便于人工比对、防止被伪造
  • 当连接服务器成功之后,服务器的公钥会被保存到
    • Linux环境:~/.ssh/known_hosts
    • Windows环境:$HOME/.ssh/known_hosts
  • 可以通过 -F 配置项查询指定服务器对应的公钥
$ ssh-keygen -F 172.22.118.28 | grep -v '#'
172.22.118.28 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICw5prT13UbYsJw4qzWDpq34WjbVpuT5xqNvb5hXMH8w
172.22.118.28 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCl/8jZjH5edrPIgtmGBg8NjfBk2b1aRqW66LZeD0vdiMEB8TYagccKYAg4h9RFyq2s/zjUh5EIK7gaYNapbLv/3ZtbwJf0UWieskK2x+dVbBySfKQjSobjCGrkf1ieLgv5ZIYmPxyT2lcTPOJLT3qQTVGr4Boygx2Ai3pOOqjs8jzVQaAPVnEGaHpqU4XyQxY2mvehe3lvvXd799vF3c5E+hKGJA2mGViYFSeZKhRXeoy/oTvEBYsAlYsT8efgyDE5F5ZqKXekxTy9bZbwutD4PDC6pt89h52oVoZJsuC28RsNmds/f0s8wJrsvantStZa9J1MiOTIgA4DsvvbwuSwMJLqis5pAFMV2IZ+efdrQPWeA2WKcBacCIjjfB4p5O3/HoXJFJfbWNJTnTbsCnyzlOZ42GZTB6JB192/LlPxsBDmeUrSZlPUjhGTxA8BEkzgL6a4HCzw0jKNGkR1L/UT4D/qcNWWZHhBvZaCWinYLUjXQpMNRKA51WM+GXChw+8=
172.22.118.28 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJu6r6tihFTYzSsXHk+fFp3Xnq7jNRJCrJbhdC8gpSJpoujxfv1JMVoYUiZNSI2ucR8oJFIgTul50ez31kXwX9c=
  • 💥注意:-F 查看的是服务器的完整公钥(Base64编码后),并不是公钥的指纹
  • 可以通过下面的命令将Base64编码后完整公钥转换为公钥指纹,方便比对
# 服务器端查看公钥指纹
apluser@FengYeHong-HP:~$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:R6Ra3HpmUF8+MgTj2Rd7guogV2STz1mjLhfIGA7fJB8 root@FengYeHong-HP (ED25519)# 在客户端将Base64编码后完整公钥转换为公钥指纹
$ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICw5prT13UbYsJw4qzWDpq34WjbVpuT5xqNvb5hXMH8w" | ssh-keygen -lf -
256 SHA256:R6Ra3HpmUF8+MgTj2Rd7guogV2STz1mjLhfIGA7fJB8 no comment (ED25519)
  • 可以通过下面的命令批量查看服务器保存到客户端的全部公钥的指纹
$ ssh-keygen -F 172.22.118.28 | grep -v '#' | awk '{print $2 " " $3}' | ssh-keygen -lf -
256 SHA256:R6Ra3HpmUF8+MgTj2Rd7guogV2STz1mjLhfIGA7fJB8 no comment (ED25519)
3072 SHA256:6zpOXvNpQQZUMevJe+/bSGcySCnqBGZE8p2hoMjPNh0 no comment (RSA)
256 SHA256:ZMFgHvPdsZSIuGyEkv1WFgJT3eGjSC4AI/HwTMH4s8o no comment (ECDSA)
  • 💥需要:如果服务器使用的不是默认端口的话,需要指定端口才能查看
$ ssh-keygen -F [192.168.3.23]:2222
# Host [192.168.3.23]:2222 found: line 5
[192.168.3.23]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmXkFXdtiy/3q/+C0n4oZWjk9Ooaue+qH5Ps4BIHdlVgyu3jaTJ8NMmaYebgjkzYca+GvHM4ymZB5pt/iR9DDcjpwA66nVjra8SWLZqxsnlbcs8RMR2fp8dVPvnG2uKnn3S0CHV/7/XbFdvX0nzWxHdA/YqVlUR4TPKzhAmM62DBEvRdWpuok0r2xTsE8Q/xv+SKE08t3BzUde4iDV8rEoJQ130W96sZBnEadQtr//jPIDuJ4Vjfu/xzDgqLF463AGB51E6lu9Ix9TmC+nfHCENPRrBHh6VgxHVnNi5rv9NO4kRT1CNMIeVOVccP7NY+v6j2INiEX6vo08HHK0CoQp

1.6 -R 删除指定服务器对应的公钥

⏹当远程服务器被重新安装、密钥被更新或 IP 被他人占用时,就会出现类似于下面的警告

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:OYtwkILXy0dkzCTnO+2YclxZVOzQw9SzBHuaF3ve6Is.
Please contact your system administrator.
Add correct host key in /c/Users/Admin/.ssh/known_hosts to get rid of this message.
Offending RSA key in /c/Users/Admin/.ssh/known_hosts:2
Host key for [192.168.3.23]:2222 has changed and you have requested strict checking.
Host key verification failed.
Connection closed# 👇👇👇翻译成中文就是👇👇👇
该主机的公钥指纹跟 ~/.ssh/known_hosts 文件储存的不一样,必须处理以后才能连接。
这时,你需要确认是什么原因,使得公钥指纹发生变更,到底是恶意劫持,还是管理员变更了 SSH 服务器公钥。
# 👆👆👆翻译成中文就是👆👆👆

⏹如果服务器是值得被信任的,可以通过-R配置项删除保存在known_hosts 文件中的服务器公钥
当通过ssh命令再次连接服务器时,新的服务器公钥指纹就会被重新添加到known_hosts 文件中。

# 删除指定服务器对应的公钥
$ ssh-keygen -R 172.22.118.28
# Host 172.22.118.28 found: line 6
# Host 172.22.118.28 found: line 7
# Host 172.22.118.28 found: line 8
~/.ssh/known_hosts updated.
Original contents retained as ~/.ssh/known_hosts.old# 再次连接时会出现提示
$ ssh apluser@172.22.118.28
The authenticity of host '172.22.118.28 (172.22.118.28)' can't be established.
ED25519 key fingerprint is SHA256:R6Ra3HpmUF8+MgTj2Rd7guogV2STz1mjLhfIGA7fJB8.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

二. ssh命令

2.1 -v 查看连接的详细信息

在这里插入图片描述

2.2 -p 指定端口号

ssh -p 22 apluser@172.22.118.28

2.3 连接远程服务器的时候执行命令

2.3.1 连接单台服务器时,执行命令

# 要指定的命令可以不带单引号
ssh apluser@172.22.118.28 ls -l ~/work/
# 但最好还是带着单引号
ssh apluser@172.22.118.28 'ls -l ~/work/'

2.3.2 批量连接多台服务器时执行命令

⏹执行后,只需要输入服务器的密码即可

for i in {1..2}; do ssh c1kap1${i}a 'ls -l /data/work'; done

⏹如果使用的TeamTerm连接linux服务器的话,还可以写一个ttl脚本来批量执行

  • 详情请参考这篇博客 → 对日开发 TeraTerm 批量向各台服务器传输文件
; -----------------------------------------
exec_cmd = "'ls -l /data/work/'"
SSH_PWD = 'pwd001'
; -----------------------------------------for i 1 2; 拼接ssh命令sprintf2 ssh_cmd 'ssh c1kap1%da %s' i exec_cmd; 执行ssh命令sendln ssh_cmdwait 'password:'sendln SSH_PWDwait '$'
next

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

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

相关文章

从C++0基础到C++入门 (第二十五节:指针【所占内存空间】)

目录 一. 指针所占内存空间 1.1 验证指针大小的代码示例 1.2 不同系统架构下的差异 1.3 指针大小与类型无关 1.4 空指针的大小 1.5 多级指针的大小 1.6 实际应用中的注意事项 一. 指针所占内存空间 指针在内存中占用的空间大小取决于系统架构和编译环境。 32位系统中指…

Windows选择文件自动删除及输入框自动打字的解决办法

觉得有帮助麻烦您动动发财的小手点赞、收藏、加关注&#xff0c;感谢&#xff01; 运行环境&#xff1a;windows10 现象&#xff1a;鼠标点击任何文件&#xff0c;上下键选择任何文件都会自动放入回收站并弹警告框&#xff0c;鼠标放入输入框会自动打一串字符&#xff0c;删除…

大模型 MCP服务案例详细讲解

大模型与 MCP(Model Context Protocol)服务器的交互是一个双向、异步、流式的过程,涉及协议解析、函数调用、实时数据交换等关键环节。下面我将详细解释整个交互流程,结合具体示例和时序图说明。 🔄 核心交互流程图 #mermaid-svg-Adxo4FoP4oRzAJdV {font-family:"tr…

MVCC和日志

MVCC是一种并发控制的方法&#xff0c;在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存主要是为了提高数据库并发性能&#xff0c;更好的处理读写冲突&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁&#xff0c;非阻…

Redis源码安装 Failed to configure LOCALE for invalid locale name 报错解决

源码安装之后 报错 Failed to configure LOCALE for invalid locale name原因是redis 8.0 需要配置字符集 只需要在环境变量中添加 LANGen_US.utf8 即可&#xff0c; 在配置之前先查看当前系统中存在哪些字符集 locale -a然后在 /etc/profile 环境变量中添加配置 LANGen_US.ut…

跑酷小游戏2.0

emm&#xff0c;下面是1.0版本的&#xff0c;我问了下AI&#xff0c;出了第四关&#xff0c;按步骤更新吧。其实是我也搞不懂AI在说啥//跑酷游戏C版 #include<bits/stdc.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<tim…

相比于传统的全波分析,特征模分析具有哪些优点

相比传统的全波分析&#xff08;Full-Wave Analysis&#xff0c;直接求解电场/电流分布&#xff09;&#xff0c;特征模分析&#xff08;Characteristic Mode Analysis&#xff0c;CMA&#xff09;的优点主要体现在物理可解释性、设计指导性和计算效率三个方面。1. 物理机理更清…

UE材质World Position 和 Object Position

Object Position 是 物体原点在世界坐标系下的位置 World Position 是 物体上的这个点 在世界坐标系下的位置 Actor Position 是 物体轴点位置 WorldPosition - ObjectPosition 是一个从物体原点&#xff08;pivot&#xff09;指向物体上该点的向量&#xff08;方向&#x…

github上传文件

git remote add origin https://github.com/Ineedstrong/socket-practice.git如果不行的情况下git remote set-url origin gitgithub.com:Ineedstrong/socket-practice.git就以这种方式3. 使用 SSH 替代 HTTPS&#xff08;推荐&#xff09;绕过 HTTPS 的 TLS 问题&#xff1a;生…

【STM32U385RG 测评】基于VSCode的STM32开发环境搭建

【STM32U385RG 测评】搭建基于VSCode的STM32开发环境 文章目录【STM32U385RG 测评】搭建基于VSCode的STM32开发环境一、安装软件1.1 安装VSCode1.2 安装STM32CubeMX1.3 安装STM32CubeCLT1.4 安装ST-MCU-FINDER-PC二、安装插件2.1 安装 STM32Cube for VSCode插件三、创建项目3.1…

设计模式(二)——策略模式

一、基本概念 既然你已经接触到了设计模式&#xff0c;那你大概率你写过类似这样的代码&#xff1a;根据不同的选择条件&#xff08;如排序、搜索或路由&#xff09;执行不同的代码逻辑。通常的解决方案是使用if-else或switch语句&#xff0c;但这些条件判断有一个最大的问题是…

MySQL基础知识总结

一、MySQL简述 数据库 是一个有组织的集合&#xff0c;用于存储和管理数据的系统。它是一个软件系统&#xff0c;被设计用来存储、检索和管理数据&#xff0c;并提供数据的快速访问和处理。数据库可以被看作是一种特殊的文件系统&#xff0c;但与传统的文件系统不同的是&#…

数据仓库命名规范

1. 概述 数据模型是数据管理的分析工具和交流的有力手段&#xff1b;同时&#xff0c;还能够很好地保证数据的一致性&#xff0c;是实现商务智能&#xff08;Business Intelligence&#xff09;的重要基础。因此建立、管理一个企业级的数据模型&#xff0c;应该遵循标准的命名…

FlinkSQL Joins全解析

1. Lookup Join用途&#xff1a;用于流表与外部维表&#xff08;静态或缓慢变化表&#xff09;的关联&#xff08;如 MySQL、HBase 等&#xff09;。特点&#xff1a;通过 实时查询外部存储 获取维度数据。仅支持 处理时间&#xff08;Processing Time&#xff09;语义&#xf…

【FileZilla】基于 FTP 的 Windows 和 Linux 文件传输

在嵌入式开发过程中我们经常需要在 Windows 和 Linux 下进行文件传输&#xff0c;本文就介绍一种通过 FTP 实现 Windows 和 Linux 文件传输的方法。 Windows 为物理主机&#xff0c;Linux 是在 Vmware 虚拟机中安装运行的 Ubuntu&#xff0c;版本为 18.04。 Ubuntu 安装 FTP …

【GPT入门】第42课 ollama安装与运行llama3模型

【GPT入门】第42课 ollama安装与运行llama3模型1. 安装ollama2.运行模型3.测试模型3.1 直接在命令行交互3.2 openai接口1. 安装ollama https://ollama.com/ 选download, 选linux 执行安装命令&#xff1a; curl -fsSL https://ollama.com/install.sh | sh2.运行模型 启动服…

Lua语言元表、协同程序

元表元表的定义允许我们改变table的行为。setmetatable(普通表&#xff0c;元表)-- 元表a {"a","b","c"} -- 普通表 b {} --元表c setmetatable(a,b)print("------------------------")f {}print("f:",f)d setmetatabl…

[已解决]VSCode右键菜单消失恢复

前言 莫名其妙,好似VSCode自动更新以后,右键菜单就失效了,重装也无果. 手动搞一个吧 保存下面代码到桌面修复VSCODE右键菜单.reg,双击运行即可. Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\VSCode]"使用 VSCode 打开""…

什么是浏览器标识?

浏览器标识 层面一&#xff1a;网络层指纹 (HTTP/TLS) 这是最基础的指纹&#xff0c;即使不用浏览器&#xff0c;只用Go的 net/http 发请求也会留下。HTTP Headers (请求头): User-Agent: 最著名的标识&#xff0c;声明自己是什么浏览器。很容易伪造&#xff0c;但也很容易被识…

五十八、【Linux系统nginx服务】nginx代理服务器、nginx优化

Nginx代理技术全景图 #mermaid-svg-0dRktnHYPXypO9xB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0dRktnHYPXypO9xB .error-icon{fill:#552222;}#mermaid-svg-0dRktnHYPXypO9xB .error-text{fill:#552222;stroke…