SSH Public Key远程登录、连接Linux或者Github/Gitee
一、本地Vscode远程免密登录Linux
1. VScode 添加 Remote-SSH 扩展
- 在VScode中打开扩展商店,搜索Remote-SSH
- Vscode中使用命令ctrl + shift + p(Windows系统)打开命令面板,输入Remote-SSH,点击***Remote-SSH:Open SSH Configurationo File***,如下图所示:
- 进入C:\Users\用户名.ssh\config文件,输入以下内容:
Host xxx
HostName xxx
User xxx
IdentityFile xxx
其中, - Host可以随便起(可以与HostName一样) - HostName写要连接的Linux服务器或者虚拟机ip(查询命令:ifconfig -a) - User写要登录的用户名,比如root - IdentityFile写后面生成的SSH私钥,一般在C:\Users\用户名.ssh文件夹下(该文件夹为隐藏文件夹)
2. 配置秘钥
- Windows系统下进入命令行(键盘:win+R,输入cmd,也可以通过其他方式),命令行中输入命令:
ssh-keygen -t rsa
- 如果你没有像我一样瞎搞,比如要连接多个远程服务器,并且要区分产生的秘钥文件,那么这步可以跳过,转到下一步
ssh-keygen -t rsa -f C:\Users\用户名\.ssh\Linux_id_rsa
- 把 Linux_id_rsa.pub拷贝到服务器 ~/.ssh 目录下(这个有多种方式,你可以使用别的连接工具比如xftp),然后在Linux bash中执行:
cd ~/.ssh
cat -A Linux_id_rsa.pub
dos2unix Linux_id_rsa.pub
cat Linux_id_rsa.pub >> authorized_keys
- 生成秘钥之后,只需要回到本地Windows或者进行VScode中,在C:\Users\用户名.ssh文件夹下的config文件中(之前提到过)写入:
Host xxx
HostName xxx
User xxx
IdentityFile "C:\Users\*****\.ssh\id_rsa"
其中IdentityFile中对应的是生成的私钥文件所在位置。
- 接下来在VScode中就可以免密登录Linux虚拟机或者远程服务器了。
二、Linux虚拟机(或Linux服务器)连接管理Github
Linux连接管理Github基本步骤和上述过程一致,只不过此时的Linux相当于客户端,而Github相当于服务端了。
1. bash中顺序执行以下命令,生成秘钥
ssh-keygen -t rsa -C "your email" -f ~/.ssh/github_id_rsa
2. 在github上创建一个仓库(远程库)
3. 将生成的公钥添加到Github上
- 进入Github->登录个人账户->点击右上角头像->选择 Settings ->选择-> SSH and GPG keys ->选择 New SSH key ->把公钥文件 github_id_rsa.pub 里的内容粘贴到里面(title标题自定义)。
4. 测试连接
ssh -vT git@github.com
- 若是执行成功,且你的~/.ssh文件夹下没有 known_hosts 文件,系统会问你一次,直接输入yes就行,然后就会生成 known_hosts 文件,该文件实际上记录了连接Github的公钥。
- 如果你出现了 ***Permission denied(publickey)***,这就说明你遇到了经常出现的问题,我也是搞了好久呢~
简单来说,我最先采取的方法是在bash中执行:
ssh-add ~/.ssh/github_id_rsa
执行完该命令证明确实可行,但看到 “缓存” 两个字,你应该能意识到可能还会出现问题,果然在我高兴的关闭电脑,第二天再打开的时候问题 Permission denied(publickey) 又出现了!并且还发现了另外的问题:
问题1:在Vscode中远程打开Linux终端,git push的时候,出现错误
问题2:重启电脑后,Permission denied(publickey)反复出现
解决以上两个问题有两种方式:
第一种方式(临时性):
之前通过ssh-add命令将密钥添加到ssh-agent
是只在Linux中进行的,为了VScode中同步,你需要在VScode中打开Linux终端,
然后执行相同的命令,这样你就可以同时在Linux远程服务器和本地VScode中远程同步Github了。
第二种方式(永久性):参见步骤5.
5. Linux中配置ssh的config文件
- 在Linux下,进入 ~/.ssh 文件夹,创建config文件,文件中输入:
Host github.com
HostName github.com
IdentityFile ~/.ssh/github_id_rsa
PreferredAuthentications publickey
User xxx
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
User xxx
- 这一步完成的是: 配置多个ssh密钥对并且永久多ssh管理
- 其中
PreferredAuthentications publickey : PreferredAuthentications 是为了指定客户端身份验证方法的顺序,此选项的默认值是:“gssapi-with-mic, hostbased, publickey, keyboard-interactive, password” - 其中,Host可以随便起,你甚至可以为同一个HostName配置多个Host,参考
6. 同步Github
- 说明: SSH就是为了远程免密登录的,实际上非必须,只是为了方便而已。不进行SSH远程登录的话,会是以下两种情况:
1.VScode远程连接Linux服务器时,每次打开VScode选择打开远程Linux文件时,
都需要输入密码;
2. Linux服务器或者本地Windows(在二者SSH连接之后),执行git push等命令
同步Github时,都要输入邮箱和密码。
- 最后是在Github上托管自己的代码,打开/新建Linux服务器上或者本地Windows的一个文件夹,顺序执行以下命令:
cd yourfile
git config --global user.name “your name”
git config --global user.email “your email”
git config --list
git init
git add .
git commit -m "此次提交要备注的信息"
git remote add origin git@github.com:yourname/test.git
git push -u origin master
三、总结
以上完成了以下内容:
- VScode远程免密登录Linux(可以是虚拟机,也可以是Linux服务器)
- Linux同步Github/Gitee,同步Gitee的操作和同步Github大致一样
- git同步过程也适用于本地电脑同步Github/Gitee
四、参考
VScode + Remote-SSH 免密连接服务器 git Github Permission denied (publickey) Github permission denied: ssh add agent has no identities 配置多个ssh密钥对并且永久多ssh管理 Gitee配置多个账号详解 ssh:ssh-agent、ssh-add
以上
|