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.csdn.net/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

### 解决locale报错问题
# 服务器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-ctr,aes256-cbc
## 用于生成每个连接密钥的密钥交换算法
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.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--必须
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

识途老码

赞赏是第一生产力

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

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

打赏作者

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

抵扣说明:

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

余额充值