配置重拾iOS

重拾iOS-SSH

2020-06-15  本文已影响0人  Jack1105

一. 什么是SSH

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

SSH以非对称加密实现身份验证,身份验证有多种途径:
1)例如其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;

2)另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程中私钥本身不会传输到网络中。

SSH协议有两个主要版本,分别是SSH-1和SSH-2。无论是哪个版本,核实未知密钥来源都是重要的事情,因为SSH只验证提供用户是否拥有与公钥相匹配的私钥,只要接受公钥而且密钥匹配服务器就会授予许可。这样的话,一旦接受了恶意攻击者的公钥,那么系统也会把攻击者视为合法用户。


二. 密钥管理

在类Unix系统中,已许可登录的公钥通常保存在用户 /home 目录的 ~/.ssh/authorized_keys 文件中,该文件只由SSH使用。当远程机器持有公钥,而本地持有对应私钥时,登录过程不再需要手动输入密码。另外为了额外的安全性,私钥本身也能用密码保护。

私钥会保存在固定位置,也可以通过命令行参数指定(例如ssh命令的“-i”选项)。ssh-keygen是生成密钥的工具之一。

SSH也支持基于密码的身份验证,此时密钥是自动生成的。若客户端和服务端从未进行过身份验证,SSH未记录服务器端所使用的密钥,那么攻击者可以模仿服务器端请求并获取密码,即中间人攻击。但是密码认证可以禁用,而且SSH客户端在发现新密钥或未知服务器时会向用户发出警告。


三. SSH的安全验证

在【客户端】来看,SSH提供两种级别的安全验证。

在【服务器端】,SSH也提供安全验证。


四. ssh-keygen

ssh-keygen 是Unix和类Unix计算机系统上的安全外壳(SSH)协议套件的标准组件,用于通过使用各种加密技术在不安全的网络上建立远程计算机之间的安全shell会话。ssh-keygen实用程序用于生成,管理和转换身份验证密钥。

ssh-keygen命令语法

ssh-keygen命令的语法如下:

ssh-keygen [选项] 

ssh-keygen命令的一些重要选项如下:

ssh-keygen命令选项 描述

-b bits 指定要创建的密钥中的位数。 最小位长度为768位,默认长度为2048位。
-C comment 提供新注释。
-p 请求更改私钥文件的密码而非创建新私钥。
-t 指定要创建的密钥类型。
-o 使用新的OpenSSH格式。
-q 静默的ssh-keygen。 在创建新密钥时,/etc/rc文件会使用它。
-N 提供新的密码。
-F(或-B) 对于ssh-keygen2,以Bubble Babble格式转储密钥的指纹

五. SSH的应用

5.1 使用 SSH 协议来访问 Git 仓库

1)生成密钥对

打开命令行终端输入 ,连续点击 Enter 键即可。

ssh-keygen -t rsa -C "[your_mail]"
// 例如:ssh-keygen -m PEM -t rsa -b 4096 -C "jack1105@sina.com"

若需要使用多个 SSH 密钥对(您可能同时在多个代码托管平台工作),在提示“Enter file in which to save the key” 时,输入一个新的文件名称就不会覆盖默认的密钥对。
也可以使用 -f 指定文件名称,默认名称为id_rsa

ssh-keygen -t rsa -C "[your_mail]" -f ~/.ssh/[custom_name]
// 例如:ssh-keygen -m PEM -t rsa -b 4096 -C "jack1105@sina.com" -f ~/.ssh/id_rsa_github
2)将公钥部署到服务器上(github,gitlab ...)
// 查看公钥,拷贝内容,部署到github的SSH Keys 中;
cat ~/.ssh/id_rsa.pub
3)测试是否成功
ssh -T [gitlab地址]
// 比如访问github的地址 ssh -T git@github.com
// 如果需要将详细信息打印出来,可以使用指令 ssh -T -v git@github.com
// Welcome to GitLab, xxx!

如果还提示需要输入密码

可能是因为没有将私钥添加到ssh-agent中,可以使用指令

// 将id_rsa添加进ssh-agent管理器中
ssh-add ~/.ssh/id_rsa // 会将私钥保存到ssh-agent指定的session中,重启会导致ssh-agent服务重置
// 或者
ssh-add -K ~/.ssh/id_rsa // 如果是Mac用户,保存到keychain,达到永久保存的目的

5.2 同时连接github和gitlab

1)按前面的方法,分别创建用于github和gitlab的密钥对
open ~/.ssh

我这里命名的是:

id_rsa_github
id_rsa_github.pub
id_rsa_gitlab
id_rsa_gitlab.pub
2)将公钥部署到对应的服务器上
3)添加config文件【可选】
vim config

配置的内容为:

# github
Host github
    User git
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github

# github
Host gitlab
    User gitlab
    HostName gitlab.xxx.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gitlab
4)测试

配置了config文件后,就可以直接通过host名称来测试连接是否成功;

ssh -T github
ssh -T gitlab

5.3 ssh-agent

# 开启 agent
eval $(ssh-agent -s) ←┘
Agent pid 8428


# 添加 钥匙名
ssh-add ~/.ssh/id_rsa_github ←┘
Identity added: /c/Users/user/.ssh/id_rsa_github (/c/Users/user/.ssh/id_rsa_github)


# 查看 agent list
ssh-add -l ←┘
8428 SHA256:A9UcJMadwTpF7TvsT5LEXsSssTs5qehmV9Q2Q8Ntw3o /c/Users/user/.ssh/id_rsa_github (RSA)


# 不用时可以关闭 agent
eval $(ssh-agent -k) ←┘
Agent pid 8428 killed

相关参考

1)维基百科 https://zh.wikipedia.org/wiki/Secure_Shell

2)ssh-keygen https://zh.wikipedia.org/wiki/Ssh-keygen

3)github或者gitlab配置SSH指南 https://segmentfault.com/a/1190000015337773

4)同时连接gitlab和github https://juejin.im/post/5ac0cf356fb9a028df22c246

上一篇下一篇

猜你喜欢

热点阅读