一、ssh简介
ssh全称为Secure Shell, 意味安全的外壳,旨在为不安全的网络提供共安全的通信。 参考自碎步の流年的博客
使用ssh连接github,能够增强安全性和便捷性。因为可以启用ssh代理,这样就不用每次push都要输入密码。
首先,要保证本机安装了ssh工具,一般windows会自带openssh,没有的话可以使用git bash上的,不过两者启动ssh-agent的方式不同。
> ssh -V # 查看版本,以及是否安装了ssh
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
二、基本操作
1.生成密钥,添加到github个人账户
第一步,输入生成密钥的命令,然后根据提示设置密钥密码。
# 生成一个rsa类型的、4096位的、以邮箱为用户标识的密钥对
> ssh-keygen -t rsa -b 4096 -C "your email"
由于ssh使用非对称加密来保证安全性,因此需要我们在本机生成自己的私钥和公钥,然后把私钥保存起来,把公钥发给将要连接的远程主机上即可进行通信。生成好的密钥对默认保存在C:\Users\<用户名>\.ssh文件夹中。
第二步,将公钥添加到github的个人账户中。公钥的位置在.ssh\id_rsa.pub(如果使用rsa算法的话),首先复制其文本,然后在github上,进入个人账户的“SSH and GPG keys”页面即可点击添加自己的公钥信息,设置之后就可以连接远程主机了。
2.连接远程主机
ssh [-T/-t] 用户名@主机名 [-i path/name]
常用参数
- -T 不占用远程主机pst(pseudo-terminal,伪终端),因此连接会被保持,但不能获得交互式体验。
- -t 让远程主机分配pst(pseudo tty,伪终端),但是许多远程服务器禁止分配tty(teletypewriter,就是终端的早期叫法,因为早期终端就是一个电传打字机)。
- -i 显式地指定私钥位置和名字
例如:
测试github上ssh公钥的设置是否成功。
> ssh -T git@github.com
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
Enter passphrase for key 'C:\Users\Administrator/.ssh/id_rsa':
Hi littlecaca! You’ve successfully authenticated, but GitHub does not provide shell access.
如果是第一次连接主机git@github.com,会提示是否接受该公钥,代表确认对方就是github的主机。接收后该公钥信息会被写入.ssh\known_hosts文件,今后通信就用这个公钥加密发送数据。
3.手动开启ssh认证代理
ssh认证代理可以自动完成身份认证,开启之后就不要每次连接都输入密钥的密码。使用windows openssh中的ssh-agent最为方便,因为它以服务方式运行,不要与终端绑定;也可以使用git bash中的ssh-agent,它以普通的进程方式运行,因此需要为终端设置环境变量来与它通信。接下来分别介绍这两种方式。
1)运行windows openssh的ssh-agent服务
首先以管理员身份打开powershell(如果ssh服务被禁用,以管理员身份可以将其开启)
第一步,检查ssh-agent服务是否开启:
> Get-Service -Name ssh-agent
Status Name DisplayName
------ ---- -----------
Stopped ssh-agent OpenSSH Authentication Agent
如果Status为running,请忽略第二步。
第二步,开启ssh-agent
> ssh-agent
unable to start ssh-agent service, error :1058
如果出现上面这种情况,说明ssh-agent被禁用,在管理员身份下设置其启动方式为手动即可
> Set-Service -Name ssh-agent -StartupType manual
然后,开启服务
> Start-Service ssh-agent # 或者直接运行ssh-agent
查看是否开启成功
> Get-Service ssh-agent
Status Name DisplayName
------ ---- -----------
Running ssh-agent OpenSSH Authentication Agent
2)运行git bash所带的mingw项目的ssh-agent进程
在bash中输入:
eval "$(ssh-agent -s)"
# 也可以使用:
ssh-agent bash
eval “$(ssh-agent -s)” 首先启动ssh-agent,然后为shell设置环境相应环境变量SSH_AUTH_SOCK和SSH_AGENT_PID,而ssh-agent会创建一个新的bash并设置这两个环境变量,ssh-add和ssh等工具收到用户命令后会先检查环境变量看是否配置了ssh-agent。另外,通过手动设置SSH_AUTH_SOCK和SSH_AGENT_PID可以实现本机多个终端共享一个ssh-agent。
$ ssh-agent -s
SSH_AUTH_SOCK=/tmp/ssh-UO6gTprepc0V/agent.1145; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1146; export SSH_AGENT_PID;
echo Agent pid 1146;
4.添加密钥
> ssh-add ~/.ssh/id_rsa # 将私钥添加到ssh-agent,这样它就可以用这个自动帮你认证了。
对于作为服务启动的ssh-agent来说,只需在服务启动后进行一次ssh-add,而对于作为进程启动的ssh-agent,需要在终端开启后,设置环境变量与ssh-agent进程通信。
三、结语
本文介绍了ssh及其基本的用法,在学习git以及github的过程中,必然会接触很多辅助工具,我们只需在实践中学习必要的那一部分即可。
读完本文,你学会了一下内容:
- 了解了ssh的功能和基本原理
- 会使用ssh-keygen生成自己的密钥对,并添加到自己的github个人账户上
- 会使用ssh连接到远程主机
- 能够开启ssh-agent认证代理,添加自己密钥的密码,实现客户端身份自动认证。
5282


&spm=1001.2101.3001.11974&articleId=129260431&d=1&t=3&u=f611be4e65f24456b0827ed1f4cfb26c)

被折叠的 条评论
为什么被折叠?



