ssh客户端

ssh客户端简介

该文档适用于RHEL7RHEL8系列Linux

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

在这里插入图片描述


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

~/.ssh 目录权限700

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

# 设置~/.ssh目录权限
chmod 700 ~/.ssh

在这里插入图片描述


生成ssh密钥对

https://blog.youkuaiyun.com/omaidb/article/details/120028143


公钥和私钥的权限

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

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

# 设置私钥和公钥文件权限
chmod 600 id_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 或 1
Protocol 2

## 忽略第一次强制校验主机密钥
### ask 提示用户
### yes 会拒绝
### no 不检查
StrictHostKeyChecking no

# 定义known_hosts文件为空--不检查指纹
UserKnownHostsFile /dev/null

## GSSAPI认证能优化ssh连接速度
GSSAPIAuthentication no
## 不检查IP
CheckHostIP no
## 启用压缩
Compression yes
## 压缩等级 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次服务器无响应客户端会断掉
ServerAliveCountMax 1440
## 服务器存活时间间隔,60秒发送一次KeepAlive
ServerAliveInterval 60
## 发送TCP保活报文
TCPKeepAlive yes

# 安全加密配置 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。
AddKeysToAgent yes

# 指定连接的时候使用的地址族,值可以为 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
	Hostname 114.114.114.114
	Port 2222
	# 指定私钥
	identityfile ~/.ssh/id_rsa_dns
	# 强制 SSH 只使用指定的私钥文件进行身份验证
	IdentitiesOnly yes
	# 指定公钥
	CertificateFile ~/.ssh/user-cert.pub
	# 配置1天(60秒*1440次)内ssh客户端不超时
	## 服务器存活最大数值超过次1440次服务器无响应客户端会断掉
	ServerAliveCountMax 1440
	## 服务器存活时间间隔,60秒发送一次KeepAlive
	ServerAliveInterval 60
	## 发送TCP保活报文
	TCPKeepAlive yes

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_key
256 SHA256: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 md5
256 MD5: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 sha1
256 SHA1:lQFmokJbzQziD9NngktJWpzz2Fk ssh_host_ecdsa_key.pub (ECDSA)

# 查看dsa私钥sha256格式指纹
[rhel8 root /etc/ssh]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key -E sha256
256 SHA256: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 sha512
256 SHA512: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.youkuaiyun.com/qq_27727147/article/details/120304936

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


解决办法:

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


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

参考: https://blog.youkuaiyun.com/wd2014610/article/details/85639741

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

在这里插入图片描述


使用pem密钥登陆

# 配置pem密钥文件权限为600--必须
sudo chmod 600 key.pem 

# -i 指定密钥文件登陆
ssh -i key.pem root@IP

# 可以使用ssh-add 添加key文件:
ssh-add -k key.pem

.ssh/config配置文件指定pem密钥
在这里插入图片描述

# 正常登陆机器:
ssh root@IP

在这里插入图片描述


启动 SSH 代理

# 启动 SSH 代理
eval "$(ssh-agent -s)"

# 为 SSH key 启用 SSH 代理
ssh-add ~/.ssh/git_id_rsa

# 列出你添加到 SSH 代理中的所有私钥
ssh-add -l
<think>好的,我现在需要帮助用户了解如何生成SSH密钥。首先,我得回忆一下SSH密钥生成的基本步骤和相关命令。记得用户提到的几个引用里提到了使用ssh-keygen命令,还有保存路径和不同平台的操作。 首先,用户的问题是如何生成SSH密钥。根据引用[1]和[2],生成SSH密钥的主要工具是ssh-keygen,这个命令在Linux、macOS和Windows(比如使用Git Bash)都适用。步骤大概是打开命令行工具,运行命令,然后设置保存位置和密码。 需要详细说明每个步骤。比如,第一步打开终端,对于不同系统用户可能需要不同的指引。比如在Windows上,用户可能需要用命令提示符或者安装Git Bash。然后运行ssh-keygen命令,这里要提醒用户默认的参数是RSA,但也可以选择其他类型,比如ed25519,根据引用[4]中的例子,可能还涉及到指定路径和文件名,比如-f参数。 接下来,保存路径的问题。引用[3]提到了私钥和公钥的默认保存位置,通常在用户目录的.ssh文件夹下,比如id_rsa和id_rsa.pub。用户可能需要知道如何指定自定义路径,或者使用默认的。同时,设置密码是可选的,但为了安全推荐设置。 然后,生成后的操作,比如将公钥上传到服务器,或者添加到GitHub等平台。这部分可能需要简要说明,比如使用ssh-copy-id命令,或者手动复制内容。 还要注意不同操作系统的差异,比如在Windows上可能需要额外步骤来启动ssh-agent,或者在生成密钥后配置权限。比如,.ssh目录的权限需要设置为700,私钥文件设置为600,防止其他用户访问。 另外,用户提供的引用中有提到kali生成密钥的例子,使用-f参数指定路径,这可能是一个特殊情况,比如生成系统级别的密钥,但普通用户一般不需要这样,所以可能需要区分普通用户和管理员的操作。 最后,常见问题解答,比如密钥类型的选择(RSA vs ed25519)、多密钥管理、权限问题等,这些都是用户可能会遇到的,需要预先考虑并给出提示。 需要确保步骤清晰,命令正确,路径正确,并且注意事项到位。同时,语言要简洁明了,用中文,符合用户的要求,避免使用Markdown格式,但按照之前的示例,回答的结构需要符合用户可见层的要求,结构清晰,分步骤说明。 可能还需要检查是否有遗漏的步骤,比如生成后的测试连接,或者如何确认密钥是否正确添加。不过根据用户的问题,主要关注生成过程,所以这部分可能不需要展开,但相关问题可以提到。 总结下来,回答的结构应该是: 1. 生成SSH密钥的步骤,分点说明,包括打开终端,运行命令,设置路径和密码。 2. 使用生成的密钥,比如上传公钥到服务器。 3. 注意事项,如密钥保存、密码设置、权限管理。 4. 常见问题解答,如密钥类型选择、多密钥处理等。 5. 相关问题,引导用户进一步了解相关内容。 现在需要把这些整理成自然的中文回答,确保LaTeX格式正确(虽然这里可能用不到数学公式,但如果有变量或路径,可能需要用行内格式,比如$HOME/.ssh/id_rsa),但根据引用中的示例,路径可能不需要用LaTeX,直接写。不过根据系统级指令,所有行内数学表达式需要用$...$,比如文件名如果有特殊符号可能需要,但可能这里不需要,所以可能可以忽略,除非有变量部分。 最后生成相关问题,比如如何上传公钥,如何管理多个密钥,密钥的安全性问题等。</think>### 如何生成SSH密钥 生成SSH密钥的步骤如下: 1. **打开命令行工具** - **Windows**:使用命令提示符或安装Git Bash(推荐)。 - **Linux/macOS**:直接打开终端。 2. **运行生成命令** 输入以下命令(默认使用RSA算法,密钥长度2048位): ```bash ssh-keygen -t rsa -b 4096 ``` 若需更安全的Ed25519算法,可使用: ```bash ssh-keygen -t ed25519 ``` 3. **设置保存路径和文件名** - 默认路径为 `$HOME/.ssh/id_rsa`(私钥)和 `id_rsa.pub`(公钥)。 - 若需自定义路径,按提示输入完整路径,例如: ```bash /your/custom/path/key_name ``` 4. **设置密钥密码(可选但推荐)** - 输入密码以加密私钥,增强安全性。若无需密码,直接按回车跳过。 5. **生成完成** - 私钥(如 `id_rsa`)需严格保密,公钥(如 `id_rsa.pub`)可上传至目标服务器[^1]。 --- ### 使用生成的密钥 1. **上传公钥到服务器** - 使用 `ssh-copy-id` 命令(需提前安装): ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname ``` - 或手动复制公钥内容到服务器的 `~/.ssh/authorized_keys` 文件中[^2]。 2. **配置Git平台** - 将公钥内容粘贴至GitHub/GitLab等平台的SSH密钥设置页面,实现免密操作仓库[^3]。 --- ### 注意事项 1. **权限管理** - 确保 `.ssh` 目录权限为 `700`: ```bash chmod 700 ~/.ssh ``` - 私钥文件权限设为 `600`: ```bash chmod 600 ~/.ssh/id_rsa ``` 2. **多密钥管理** - 若需为不同服务生成多个密钥,通过 `-f` 参数指定不同文件名,例如: ```bash ssh-keygen -t rsa -f ~/.ssh/github_key ``` - 在 `~/.ssh/config` 中配置别名指向对应密钥[^4]。 3. **安全性** - 私钥不可泄露,建议定期更换密钥并启用密码保护。 --- ### 常见问题 - **RSA与Ed25519如何选择?** Ed25519更安全且性能更优,但部分旧系统可能不支持,此时需用RSA[^2]。 - **忘记密钥密码怎么办?** 需重新生成密钥,旧密码无法找回。 - **密钥生成失败?** 检查目录权限或尝试以管理员身份运行命令。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值