SSH问题汇集笔记
简介
最近换了电脑并且升级了 macOS,发现在使用 SSH 遇到了一些问题,在此记录希望能帮到更多的朋友。
无法连接远程服务器
执行远程连接,如下
1 | ssh root@ip.ip.ip.ip |
控制台提示如下错误:
1 | Unable to negotiate with legacyhost: no matching key exchange method found. |
解决方案
1、创建 ~/.ssh
目录
2、在~/.ssh
目录下新建 config
文件
1 | mkdir ~/.ssh |
3、编辑 config
文件,写入如下内容
1 | Host * |
无法提交代码到 Github
当提交自己的代码到自己的 git 仓库时,发生了尴尬的一幕,提示的错误信息大致如下
1 | Please make sure you have the correct access rights and the repository exists. |
后面发现需要设置本地的公钥,该公钥相当于本地和远程 github 的链接桥梁,撸起袖子开搞。完整教程可以参考官方文档,戳我即可。
假设你的 github 账号名称是 zhanghao
,邮箱是 zhanghao@126.com
1、全局配置账号和邮箱
1 | git config --global user.name "zhanghao" |
2、生成公私钥
1 | ssh-keygen -t rsa -C "zhanghao@126.com" |
在接下来提示的过程中,最好不要设置密码即直接回车。
完成之后,不出意外会在 ~/.ssh
目录下生成 id_rsa.pub
公钥文件和 id_rsa
私钥文件。
3、配置 github
登入 github,分别点击 Settings / SSH and GPG keys / New SSH key,复制 id_rsa.pub
公钥文件里面的内容粘贴保存即可。
在控制台测试一下是否成功
1 | ssh -T git@github.com |
提示如下信息即可表示成功
1 | Hi zhanghao! You've successfully authenticated, but GitHub does not provide shell access |
4、生成访问令牌(可选)
如果直接使用账号密码在控制台登入 github 是一件比较危险的事情,所以 github 采用了令牌的访问方式,一旦发生泄漏可以即可删除该令牌。
登入 github,分别点击 Settings / Developer settings / Personal access tokens / Generate new token
生成之后,需要你自己保存下来,在需要使用密码的地方使用该令牌即可。
清除本地公钥
我看自己的云主机 CPU 使用率一直很高,怀疑是中毒了,就给云主机重新安装了系统。
系统安装完成后,发现 ssh 连不上云主机了,并且在终端提示如下信息:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
清除本地公钥命令如下,清除完成后重新使用 ssh 登录即可。
1 | 换成自己的云服务器外网IP |
命令 ssh-keygen -R ip
本质是清空 ~/.ssh/known_hosts
文件内容,并给你做个备份重命名为 ~/.ssh/known_hosts.old
,又学到一招。
勿以善小而不为