news 2026/8/14 5:25:06

ssh客户端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ssh客户端

ssh客户端

  • ssh客户端简介
  • ssh客户端~/.ssh目录及相关权限
    • 生成ssh密钥对
    • 公钥和私钥的权限
    • authorized_keys(授权文件)
    • known_hosts(指纹记录核对文件)
  • ssh配置文件(~/.ssh/config)
    • ssh客户机配置示例
    • ssh客户端主配置文件/etc/ssh/ssh.conf(默认ssh配置文件):
  • 服务端/etc/ssh目录及相关文件
    • 服务端/etc/ssh目录下默认的3对(或4对)非对称加密密钥
    • 查看服务器的指纹
      • 使用ssh-keyscan查看服务器指纹
  • ssh常见问题
    • ssh秘钥登录失败:invalid format
      • 解决办法:
    • 服务器密钥变更(Host key verification failed.)
    • 使用pem密钥登陆
  • 启动 SSH 代理
  • SSH常用的GUI客户端

ssh客户端简介

该文档适用于RHEL7RHEL8系列Linux

参考: https://segmentfault.com/a/1190000021888536


ssh客户端~/.ssh目录及相关权限

~/.ssh目录权限700

# 查看~/.ssh目录的权限stat-c%a .ssh# 设置~/.ssh目录权限chmod700~/.ssh


生成ssh密钥对

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


公钥和私钥的权限

~/.ssh目录下的密钥文件权限是600
id_rsa(私钥)
id_rsa.pub(公钥)

# 查看私钥和公钥文件权限stat-c%a id_rsa id_rsa.pub# 设置私钥和公钥文件权限chmod600id_rsa id_rsa.pub


authorized_keys(授权文件)

ssh-client公钥内容保存到服务器上的authorized_keys(授权文件)中,客户端可实现免密登录.
服务器上的authorized_keys(授权文件)权限必须是600或者400

# 将指定的客户端添加为免密登陆echo"ssh-client的公钥信息">>/root/.ssh/authorized_keys

将客户端的id_rsa密钥文件,拷贝到另一台机器~/.ssh/目录下,另一台机器即可免密登录该服务器.


known_hosts(指纹记录核对文件)

known_hosts(StrictHostKey记录核对文件) —会将访问过的计算机的公钥的StrictHostKey保存在该文件中,当下次访问相同计算机时,OpenSSH会核对对应机器的StrictHostKey。如果StrictHostKey不同,OpenSSH会发出警告.


ssh配置文件(~/.ssh/config)

选项参考:
https://ohmyweekly.github.io/notes/2020-10-01-ssh-configuration/
https://deepzz.com/post/how-to-setup-ssh-config.html
https://mengxiaoxing.top/2021/10/04/ssh配置文件详解/
ssh config 配置参数freebsd官方文档
ssh config 配置 常用参数-中文doc
ssh config 常用配置参数
ssh配置文件详解

https://plantegg.github.io/2019/06/02/史上最全_SSH_暗黑技巧详解–收藏保平安/

~/.ssh/config是ssh客户端的用户级配置文件,优先级最高

# 顶格居左写,表示全局ssh客户端全局配置# 写在Host配置下,与Host参数对齐表示只对该host生效# 常用的参数# 指定ssh协议版本 2 或 1Protocol2## 忽略第一次强制校验主机密钥### ask 提示用户### yes 会拒绝### no 不检查StrictHostKeyChecking no# 定义known_hosts文件为空--不检查指纹UserKnownHostsFile /dev/null## GSSAPI认证能优化ssh连接速度GSSAPIAuthentication no## 不检查IPCheckHostIP no## 启用压缩Compressionyes## 压缩等级 1到9,ssh1支持该参数,ssh2不支持#CompressionLevel 9# 服务器sshd_config要配置接受自定义变量参数: AcceptEnv LANG LC_ALL## 指定变量(必须只写一行)# SetEnv LANG=zh_CN.UTF8 LC_ALL="zh_CN.UTF-8" MY_VAR="自定义变量"# 发送变量(必须只写一行)# SendEnv LANG LC_ALL MY_VAR# 配置1天(60秒*1440次)内ssh客户端不超时## 服务器存活最大数值超过次1440次服务器无响应客户端会断掉ServerAliveCountMax1440## 服务器存活时间间隔,60秒发送一次KeepAliveServerAliveInterval60## 发送TCP保活报文TCPKeepAliveyes# 安全加密配置 https://www.openssh.com/legacy.html## 使用DNS或SSHFP来验证主机密钥### ask,表示询问用户### yes 会拒绝### no 不检查# VerifyHostKeyDNS yes## 指定`Ciphers`采用强加密算法Ciphers aes256-gcm@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# 重用相同的连接ControlMaster auto## 连接状态文件# ControlPath ~/.ssh/ssh_mux_%h_%p_%r## 72小时内保持连接(只需要第一次输入密码)ControlPersist 72h# 是否自动将 key 加入到 ssh-agent,值可以为 no(default)/confirm/ask/yes。AddKeysToAgentyes# 指定连接的时候使用的地址族,值可以为 any(default)/inet(IPv4)/inet6(IPv6)。AddressFamily inet# 指定连接的时候使用的本地主机地址,只在系统有多个地址的时候有用。在 UsePrivilegedPort 值为 yes 的时候无效。# BindAddress 192.168.89.64# ssh连接的服务器配置Include ~/.ssh/config.d/*.conf

ssh客户机配置示例

Host node1 user dns Hostname114.114.114.114 Port2222# 指定私钥identityfile ~/.ssh/id_rsa_dns# 强制 SSH 只使用指定的私钥文件进行身份验证IdentitiesOnlyyes# 指定公钥CertificateFile ~/.ssh/user-cert.pub# 配置1天(60秒*1440次)内ssh客户端不超时## 服务器存活最大数值超过次1440次服务器无响应客户端会断掉ServerAliveCountMax1440## 服务器存活时间间隔,60秒发送一次KeepAliveServerAliveInterval60## 发送TCP保活报文TCPKeepAliveyes

ssh客户端主配置文件/etc/ssh/ssh.conf(默认ssh配置文件):

一般不直接配置这个文件, 更多用来参考文件中的配置参数

/etc/ssh/ssh.conf文件配置方法与~/.ssh/config配置方法完全一致,一般只会配置~/.ssh/config文件


服务端/etc/ssh目录及相关文件


服务端/etc/ssh目录下默认的3对(或4对)非对称加密密钥



查看服务器的指纹

# 从dsa私钥查看指纹## 也可以查看其他算法的私钥指纹,根据实际情况而定## 第一次登陆时会提示指纹,这个指纹跟服务器上查看到的指纹必须一致,如果不一致,那就是ssh被劫持了[rhel8 root /etc/ssh]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key256SHA256:EOwjru1RODrMEAUOcIPi0SdkZ85I8Un+Q35Hp+Rz+X8 ssh_host_ecdsa_key.pub(ECDSA)# 查看dsa私钥md5格式指纹[rhel8 root /etc/ssh]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key -E md5256MD5:ad:10:0e:6f:98:96:55:87:cf:f2:bf:13:46:e7:2d:a7 ssh_host_ecdsa_key.pub(ECDSA)# 查看dsa私钥sha1格式指纹[rhel8 root /etc/ssh]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key -E sha1256SHA1:lQFmokJbzQziD9NngktJWpzz2Fk ssh_host_ecdsa_key.pub(ECDSA)# 查看dsa私钥sha256格式指纹[rhel8 root /etc/ssh]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key -E sha256256SHA256:EOwjru1RODrMEAUOcIPi0SdkZ85I8Un+Q35Hp+Rz+X8 ssh_host_ecdsa_key.pub(ECDSA)# 查看dsa私钥sha512格式指纹[rhel8 root /etc/ssh]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key -E sha512256SHA512:ingRxCRQqQNYEODpBvqhJ/UhFxbPmRR8uCLjwbYWx1a9CLLr1ddVcmsC+UfrzOT//UpxDEY2Bagq6ZZB949Rcg ssh_host_ecdsa_key.pub(ECDSA)

使用ssh-keyscan查看服务器指纹

https://www.linuxcool.com/ssh-keyscan


ssh常见问题

工作中经常遇到ssh问题。


ssh秘钥登录失败:invalid format

参考: https://blog.csdn.net/qq_27727147/article/details/120304936

原因分析: 一般是公钥末尾缺少一个换行符


解决办法:

用记事本打开公钥,最后一行敲个回车即可!
如果提示的是私钥格式错误,同样最后一行加回车,如果是跨平台复制的密钥对,还要注意LFCRLF


服务器密钥变更(Host key verification failed.)

参考: https://blog.csdn.net/wd2014610/article/details/85639741

# 注意,必须是IP地址ssh-keygen-R${必须是ip地址}# 除了使用上面的命令,你也可以手工修改`known_hosts`文件,将公钥指纹删除。


使用pem密钥登陆

# 配置pem密钥文件权限为600--必须sudochmod600key.pem# -i 指定密钥文件登陆ssh-ikey.pem root@IP# 可以使用ssh-add 添加key文件:ssh-add-kkey.pem

.ssh/config配置文件指定pem密钥

# 正常登陆机器:sshroot@IP


启动 SSH 代理

# 启动 SSH 代理eval"$(ssh-agent-s)"# 为 SSH key 启用 SSH 代理ssh-add ~/.ssh/git_id_rsa# 列出你添加到 SSH 代理中的所有私钥ssh-add-l

SSH常用的GUI客户端

Oryxis(rust写的GUI客户端,性能好)
https://oryxis.app/zh-CN/#install

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 5:23:53

解决OpenCore与Windows双系统启动冲突:从原理到实战

1. 项目概述:一次典型的双系统启动冲突排查昨晚,我经历了一场持续五个多小时的“拉锯战”。事情的起因很简单:我想在一台已经安装了Windows 10的台式机上,配置OpenCore(OC)引导来启动另一个系统。本以为是个…

作者头像 李华
网站建设 2026/8/14 5:23:42

白嫖大模型

我在用 MiMo 开放平台,体验小米顶尖模型 MiMo V2.5 等。通过我的邀请码注册:双方各得 10 API 体验金 首单 9 折。邀请码:3F236D。注册:https://platform.xiaomimimo.com?ref3F236D(注册后自动填入 体验金 40 天有效…

作者头像 李华
网站建设 2026/8/14 5:22:24

C语言隐式函数声明警告:从C99标准到现代编译实践

1. 报错现象与核心问题剖析如果你在编译C语言项目时,看到控制台蹦出这么一行字:implicit declaration of function ‘xxx’ is invalid in C99 [-Wimplicit-function-declaration],别慌,这几乎是每个C程序员成长路上的“必修课”。…

作者头像 李华
网站建设 2026/8/14 5:21:15

从参数竞赛到价值落地:小白程序员必备的AI实体融合创新指南

本文深入剖析AI产业从概念炒作到实体融合的趋势转变,揭示“伪AI创新”的四大特征,并阐述真正具备商业价值的AI实体创新需满足的四大核心特质:解决真实产业痛点、深度耦合行业机理、效果可量化、具备可复制能力。文章强调AI应向下扎根实体经济…

作者头像 李华
网站建设 2026/8/14 5:20:17

Chrome / Edge 远程调试对接 AI 代理:三步开启 CDP 调试端口

Chrome / Edge 远程调试对接 AI 代理:三步开启 CDP 调试端口很多 AI 编码代理、浏览器自动化工具都需要「接管」你本地的 Chrome/Edge 来操作网页。底层统一走 Chrome DevTools Protocol(CDP)。本文讲清通用三步:开调试端口、验证…

作者头像 李华
网站建设 2026/8/14 5:16:45

【C++ 面试真题】聊聊 C++ 的构造与析构

【C 面试真题】聊聊 C 的构造与析构构造和析构是 C 面向对象篇的"开场必问"。背得出"构造初始化、析构清理"只是及格,真考你的是"多层继承下构造析构的执行顺序、基类析构为什么必须 virtual、构造函数里能不能调虚函数"——一道题能…

作者头像 李华