草庐IT

一站式解决:SSH Public Key远程登录、连接Linux或者Github/Gitee

zp_stu 2024-06-02 原文

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,也可以通过其他方式),命令行中输入命令:
# 注意,如果你直接使用这样的命令,然后一路回车,
# 会默认在C:\Users\用户名\.ssh文件夹下生成  id_rsa、id_rsa.pub两个文件
# id_rsa(私钥,放在客户端,这种情况下就是你的Windows系统)
# id_rsa.pub(公钥,放在服务端,这种情况下就是你的Linux虚拟机或者你的服务器)
ssh-keygen -t rsa # 或 ssh-keygen
  • 如果你没有像我一样瞎搞,比如要连接多个远程服务器,并且要区分产生的秘钥文件,那么这步可以跳过,转到下一步
# 事实上,ssh-keygen后面可以跟很多参数,比如:
#	-t = The type of the key to generate	(密钥的类型)
#	-C = comment to identify the key	(用于识别这个密钥的注释,一般写邮箱) 
# 	为了区分生成的秘钥文件,可以用-f参数指定生成的秘钥文件名(我就是这样做的)
ssh-keygen -t rsa -f C:\Users\用户名\.ssh\Linux_id_rsa
  • 把 Linux_id_rsa.pub拷贝到服务器 ~/.ssh 目录下(这个有多种方式,你可以使用别的连接工具比如xftp),然后在Linux bash中执行:
cd ~/.ssh
# 为了保险起见,可以进入Linux_id_rsa.pub文件查看是否正常
cat -A Linux_id_rsa.pub
# 比如Windows上传到Linux系统的文本文件,一般会有 ^M ,如果你没有出现这种情况,则跳过接下来的一条命令:
dos2unix Linux_id_rsa.pub	# 你也可以通过其他方式,自行百度
# Linux_id_rsa.pub(公钥文件)没有什么问题之后,执行以下命令:
cat Linux_id_rsa.pub >> authorized_keys	# 经过验证,此步应该是必须
# authorized_keys文件中存储着本地系统可以允许远端计算机系统ssh免密码登陆的账号信息
# 你也可以通过xftp连接linux,然后打开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中顺序执行以下命令,生成秘钥

# 因为我后面还有连接Gitee,为了区分,指定生成了秘钥文件名
ssh-keygen -t rsa -C "your email" -f ~/.ssh/github_id_rsa
# 以上命令执行过程中,会问你两次
# 第一次是:Enter passphrase (empty for no passphrase):	直接回车就行
# 第二次是问你确认以上passphrase,再次直接回车就行
# 如果你不使用 -f参数指定文件名,那么会问你三次,其中第一次是问你把秘钥文件放在哪,
# 若是直接回车的话,会默认放在~/.ssh文件夹下,并且默认秘钥文件名为:id_rsa和id_rsa.pub
# 接下来问的两次和之前相同

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-agent的高速缓存中
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的所有配置信息
git init                                  # 初始化
git add .                                 # 添加文件
git commit -m "此次提交要备注的信息"        # 提交并备注信息

# 提交到Github
# 添加远程仓库
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

以上

有关一站式解决:SSH Public Key远程登录、连接Linux或者Github/Gitee的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  3. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. 语法类似于 GitHub Flavored Markdown 的 Ruby markdown 解释器? - 2

    我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong

  6. ruby - 如何更快地解决 project euler #21? - 2

    原始问题Letd(n)bedefinedasthesumofproperdivisorsofn(numberslessthannwhichdivideevenlyinton).Ifd(a)=bandd(b)=a,whereab,thenaandbareanamicablepairandeachofaandbarecalledamicablenumbers.Forexample,theproperdivisorsof220are1,2,4,5,10,11,20,22,44,55and110;therefored(220)=284.Theproperdivisorsof284are1,2,

  7. ruby - vagrant 从 github 安装插件 - 2

    我们正在使用Vagrant进行部署,我们最终希望将此集群部署在Rackspace上。vagrant-rackspace插件是一个自然的选择,但它有一些错误,这些错误未包含在最新的0.1.1版本中(notablythatvagrantprovisiondoesn'twork)。我已经在我的personalfork中解决了这个问题通过合并其他人的工作来对存储库进行改造。是否可以从github安装vagrant插件?显而易见的事情没有奏效:[unix]$vagrantplugininstallvagrant-rackspace--plugin-sourcehttps://github.com

  8. ruby - 使用 Ruby 和 Mechanize 登录网站 - 2

    我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act

  9. ruby - 如何让 GitHub 页面使用 master 分支? - 2

    我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere

  10. ruby - 为什么这些方法没有解决? - 2

    这个问题在这里已经有了答案:WhydoRubysettersneed"self."qualificationwithintheclass?(3个答案)关闭29天前。给定这段代码:classSomethingattr_accessor:my_variabledefinitialize@my_variable=0enddeffoomy_variable=my_variable+3endends=Something.news.foo我收到这个错误:test.rb:9:in`foo':undefinedmethod`+'fornil:NilClass(NoMethodError)fromtes

随机推荐