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客户端简介
该文档适用于RHEL7和RHEL8系列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目录下的密钥文件权限是600id_rsa(私钥)id_rsa.pub(公钥)
# 查看私钥和公钥文件权限stat-c%a id_rsa id_rsa.pub# 设置私钥和公钥文件权限chmod600id_rsa id_rsa.pubauthorized_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/*.confssh客户机配置示例
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保活报文TCPKeepAliveyesssh客户端主配置文件/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
原因分析: 一般是公钥末尾缺少一个换行符
解决办法:
用记事本打开公钥,最后一行敲个回车即可!
如果提示的是私钥格式错误,同样最后一行加回车,如果是跨平台复制的密钥对,还要注意LF和CRLF
服务器密钥变更(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-lSSH常用的GUI客户端
Oryxis(rust写的GUI客户端,性能好)
https://oryxis.app/zh-CN/#install