<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Terminal on Jiang Yi(姜祎)'s Homepage</title><link>https://jiangyigithub.github.io/ai.github.io/categories/terminal/</link><description>Recent content in Terminal on Jiang Yi(姜祎)'s Homepage</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 08 Apr 2026 21:44:44 +0800</lastBuildDate><atom:link href="https://jiangyigithub.github.io/ai.github.io/categories/terminal/index.xml" rel="self" type="application/rss+xml"/><item><title>Git authentication error</title><link>https://jiangyigithub.github.io/ai.github.io/p/git-authentication-error/</link><pubDate>Sat, 22 Feb 2025 10:51:27 +0800</pubDate><guid>https://jiangyigithub.github.io/ai.github.io/p/git-authentication-error/</guid><description>&lt;h1 id="问题描述"&gt;&lt;a href="#%e9%97%ae%e9%a2%98%e6%8f%8f%e8%bf%b0" class="header-anchor"&gt;&lt;/a&gt;问题描述
&lt;/h1&gt;&lt;p&gt;在使用 &lt;code&gt;git clone&lt;/code&gt; 命令时，可能会遇到认证错误。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; git clone https://github.com/user-name/some-repository.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;正克隆到 &lt;span class="s1"&gt;&amp;#39;some-repository&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;remote: Invalid username or password.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fatal: &lt;span class="s1"&gt;&amp;#39;https://github.com/user-name/some-repository.git/&amp;#39;&lt;/span&gt; 鉴权失败
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h1 id="问题原因解决方案"&gt;&lt;a href="#%e9%97%ae%e9%a2%98%e5%8e%9f%e5%9b%a0%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="header-anchor"&gt;&lt;/a&gt;问题原因&amp;amp;解决方案
&lt;/h1&gt;&lt;p&gt;本地git配置问题，需要重新认证本地和GitHub的连接。一般是因为本地Git无法和Github的SSH服务器连接。&lt;/p&gt;
&lt;h2 id="方案1ssh"&gt;&lt;a href="#%e6%96%b9%e6%a1%881ssh" class="header-anchor"&gt;&lt;/a&gt;方案1：SSH
&lt;/h2&gt;&lt;p&gt;本方法将Github视为一个SSH服务器，本机通过SSH连接到Github。该方法主要需要在本地生成SSH密钥，并将其添加到Github的SSH密钥列表中。最后通过SSH的方式进行Git操作&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;本地生成SSH秘钥&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;默认的秘钥地址是&lt;code&gt;~/.ssh/id_rsa&lt;/code&gt;，对应的公钥就是&lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt;。如果需要指定秘钥地址，可以使用&lt;code&gt;-f&lt;/code&gt;选项，对于指定的秘钥地址，需要通过以下命令将秘钥地址加入到搜索列表中.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. Start the SSH agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;ssh-agent -s&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. Add your custom key file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; ssh-add path/to/id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;将公钥添加到Github的SSH密钥列表中。使用 &lt;code&gt;cat ~/.ssh/id_rsa.pub&lt;/code&gt; 复制公钥，然后打开&lt;code&gt;Github-&amp;gt;设置-&amp;gt;SSH and GPG keys-&amp;gt;New SSH key&lt;/code&gt;，将公钥粘贴到&lt;code&gt;Key&lt;/code&gt;中，然后点击&lt;code&gt;Add SSH key&lt;/code&gt;。将公钥&lt;code&gt;Key&lt;/code&gt;中并保存。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本机通过SSH连接到Github，可以通过以下方式验证&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; ssh -T git@github.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ssh -vT git@github.com # 查看ssh连接的秘钥文件搜索列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ssh -i ~/.ssh/id_rsa git@github.com # 自定义密钥的地址，如果使用默认的密钥地址，则不需要指定密钥地址，如果之前已经加入到搜索列表中，则也不需要指定密钥地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hi user-name! You&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;ve successfully authenticated, but GitHub does not provide shell access.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;克隆仓库：在clone的时候选择&lt;code&gt;SSH&lt;/code&gt;的方式（不是&lt;code&gt;HTTPS&lt;/code&gt;的方式），即repo的地址为&lt;code&gt;git@github.com:user-name/some-repository.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置remote repo：&lt;code&gt;git remote set-url origin git@github.com:user-name/some-repository.git&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过以上步骤，即可正常使用Git进行操作。&lt;/p&gt;
&lt;h2 id="方案2personal-access-token"&gt;&lt;a href="#%e6%96%b9%e6%a1%882personal-access-token" class="header-anchor"&gt;&lt;/a&gt;方案2：Personal Access Token
&lt;/h2&gt;&lt;p&gt;该方法通过生成一个Personal Access Token来认证本地和GitHub的连接。该方法需要在Github的设置中生成一个Personal Access Token，然后通过该Token来连接remote repo&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;生成Personal Access Token. 打开&lt;code&gt;Github-&amp;gt;设置-&amp;gt;Developer settings-&amp;gt;Personal access tokens-&amp;gt;Token(classic)-&amp;gt;Generate new token&lt;/code&gt;，在&lt;code&gt;Note&lt;/code&gt;中输入本机相关信息，在&lt;code&gt;Expiration&lt;/code&gt;中选择token失效日期，在&lt;code&gt;Permissions&lt;/code&gt;中选择&lt;code&gt;repo&lt;/code&gt;（必选，其他可选），然后点击&lt;code&gt;Generate token&lt;/code&gt;。将生成的&lt;code&gt;&amp;lt;token&amp;gt;&lt;/code&gt;复制到本地。&lt;/li&gt;
&lt;li&gt;克隆仓库：&lt;code&gt;git clone https://user-name:&amp;lt;token&amp;gt;@github.com/user-name/some-repository.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置remote repo：&lt;code&gt;git remote set-url origin https://user-name:&amp;lt;token&amp;gt;@github.com/user-name/some-repository.git&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过以上步骤，即可正常使用Git进行操作。&lt;/p&gt;
&lt;h1 id="参考资料"&gt;&lt;a href="#%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99" class="header-anchor"&gt;&lt;/a&gt;参考资料
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.github.com/en/authentication/troubleshooting-ssh/error-permission-denied-publickey" target="_blank" rel="noopener"
&gt;Error: Permission denied (publickey)
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens" target="_blank" rel="noopener"
&gt;Managing your personal access tokens
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Screen usage</title><link>https://jiangyigithub.github.io/ai.github.io/p/screen-usage/</link><pubDate>Wed, 05 Feb 2025 15:14:43 +0800</pubDate><guid>https://jiangyigithub.github.io/ai.github.io/p/screen-usage/</guid><description>&lt;h1 id="introduction"&gt;&lt;a href="#introduction" class="header-anchor"&gt;&lt;/a&gt;Introduction
&lt;/h1&gt;&lt;p&gt;Screen is a terminal multiplexer, which allows you to create multiple sessions in a single terminal window.&lt;/p&gt;
&lt;h1 id="installation"&gt;&lt;a href="#installation" class="header-anchor"&gt;&lt;/a&gt;Installation
&lt;/h1&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install screen
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h1 id="usage"&gt;&lt;a href="#usage" class="header-anchor"&gt;&lt;/a&gt;Usage
&lt;/h1&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;screen &lt;span class="o"&gt;[&lt;/span&gt;-option&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;command&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-S&lt;/code&gt;: specify the session name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d&lt;/code&gt;: detach from the session&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-r&lt;/code&gt;: reattach to the session&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt;: execute the command in the session&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-L&lt;/code&gt;: list all sessions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-wipe&lt;/code&gt;: wipe out all sessions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-x&lt;/code&gt;: execute the command in the session&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;: specify the port number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m&lt;/code&gt;: specify the mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt;: specify the title&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;: specify the version&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-h&lt;/code&gt;: display help information&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v&lt;/code&gt;: display version information&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-q&lt;/code&gt;: quit the session&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="reference"&gt;&lt;a href="#reference" class="header-anchor"&gt;&lt;/a&gt;Reference
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.gnu.org/software/screen/manual/screen.html" target="_blank" rel="noopener"
&gt;Screen usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>