
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/1190000021888536ssh客户端~/.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# 将指定的客户端添加为免密登陆echossh-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.htmlhttps://mengxiaoxing.top/2021/10/04/ssh配置文件详解/ssh config 配置参数freebsd官方文档ssh config 配置 常用参数-中文docssh 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到9ssh1支持该参数ssh2不支持#CompressionLevel 9# 服务器sshd_config要配置接受自定义变量参数 AcceptEnv LANG LC_ALL## 指定变量必须只写一行# SetEnv LANGzh_CN.UTF8 LC_ALLzh_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-gcmopenssh.com## 用于生成每个连接密钥的密钥交换算法KexAlgorithms curve25519-sha256,curve25519-sha256libssh.org,diffie-hellman-group-exchange-sha256## SSH 服务器接受的公钥算法用于向 SSH 客户端验证自身身份# HostkeyAlgorithms ssh-ed25519-cert-v01openssh.com,ssh-rsa-cert-v01openssh.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:EOwjru1RODrMEAUOcIPi0SdkZ85I8UnQ35HpRzX8 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:EOwjru1RODrMEAUOcIPi0SdkZ85I8UnQ35HpRzX8 ssh_host_ecdsa_key.pub(ECDSA)# 查看dsa私钥sha512格式指纹[rhel8 root /etc/ssh]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key -E sha512256SHA512:ingRxCRQqQNYEODpBvqhJ/UhFxbPmRR8uCLjwbYWx1a9CLLr1ddVcmsCUfrzOT//UpxDEY2Bagq6ZZB949Rcg ssh_host_ecdsa_key.pub(ECDSA)使用ssh-keyscan查看服务器指纹https://www.linuxcool.com/ssh-keyscanssh常见问题工作中经常遇到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 rootIP# 可以使用ssh-add 添加key文件:ssh-add-kkey.pem.ssh/config配置文件指定pem密钥# 正常登陆机器:sshrootIP启动 SSH 代理# 启动 SSH 代理eval$(ssh-agent-s)# 为 SSH key 启用 SSH 代理ssh-add ~/.ssh/git_id_rsa# 列出你添加到 SSH 代理中的所有私钥ssh-add-lSSH常用的GUI客户端Oryxisrust写的GUI客户端性能好https://oryxis.app/zh-CN/#install