ssh客户端简介
该文档适用于RHEL7
和RHEL8
系列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
原因分析: 一般是公钥末尾缺少一个换行符
解决办法:
用记事本打开公钥,最后一行敲个回车即可!
如果提示的是私钥格式错误,同样最后一行加回车,如果是跨平台复制的密钥对,还要注意LF
和CRLF
服务器密钥变更(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