日常开发中拉取仓库代码总会以配置ssh:方式,但是一直对于这种方式的流程不是特别熟悉。
SSH的定义
SSH(Secure Shell)是一种网络协议,用于安全地在网络上执行命令和传输数据。SSH提供了一种安全的方式来登录远程服务器,并在本地和远程服务器之间传输文件。
SSH方式的优点
-
安全性:SSH使用公钥加密技术来保护数据的安全性。任何使用公钥加密的数据,只能使用对应的私钥解密。这意味着即使数据在传输过程中被拦截,攻击者也无法解密数据,因为他们没有私钥。
-
身份验证:SSH使用公钥和私钥对进行身份验证。服务器会使用你的公钥对一个随机字符串进行加密,然后发送给你。你的SSH客户端会使用你的私钥对这个字符串进行解密,然后将解密后的字符串发送回服务器。如果服务器能够验证这个字符串,那么你就被认证为一个有效的用户。
-
数据完整性:SSH使用哈希函数来确保数据的完整性。在发送数据之前,SSH会计算数据的哈希值,然后将哈希值和数据一起发送。接收方在接收到数据后,会重新计算数据的哈希值,然后与接收到的哈希值进行比较。如果两个哈希值匹配,那么数据就被认为是完整的。
-
简便性:SSH是一种命令行工具,可以在所有主流的操作系统中使用。你可以使用SSH来登录远程服务器,执行命令,传输文件,等等。
总的来说,SSH是一种强大的工具,可以帮助你安全地在网络上执行命令和传输数据。
但是就是对于初学者会觉得配置复杂,如生成SSH密钥对、将公钥添加到远程服务器、管理known_hosts文件等步骤。下面我们一起就SSH链接流程、如何生成公钥来讲解,希望能解答疑惑。
SSH连接大致流程
-
客户端连接到服务器,请求建立SSH连接。
-
服务器将其公钥发送给客户端。
-
客户端接收到公钥后,会检查这个公钥是否在
known_hosts文件中。如果在,那么客户端会认为服务器是可信的,然后继续连接过程。如果不在,那么客户端会显示一个警告,提示用户服务器的公钥未知。 -
客户端会生成一个随机的会话密钥,然后使用服务器的公钥对这个会话密钥进行加密,然后将加密后的会话密钥发送给服务器。
-
服务器接收到加密的会话密钥后,使用自己的私钥对其进行解密,得到会话密钥。然后,服务器和客户端都可以使用这个会话密钥来加密和解密数据。
-
服务器会使用客户端的公钥对一个随机字符串进行加密,然后发送给客户端。客户端使用自己的私钥解密这个字符串,然后将解密后的字符串发送回服务器。如果服务器能够验证这个字符串,那么客户端就被认证为一个有效的用户。
客户端生成SSH公钥配置到服务器上(如代码仓库里面配置ssh key)。
而在客户端第一次使用SSH连接到一个新的远程服务器时,SSH客户端会询问是否信任这个新的服务器。如果选择信任,那么服务器的公钥就会被添加到known_hosts文件中。
具体来说,当你第一次连接到一个新的服务器时,你会看到类似以下的提示:
The authenticity of host 'example.com (192.0.0.0)' can't be established. RSA key fingerprint is SHA256:XXXXXXBn4cbehNXZSoC1zGehs7Pl4qgfXXXXXXX. Are you sure you want to continue connecting (yes/no)?
如何生成SSH公钥
ssh-keygen是一个用于生成、管理和转换认证密钥的工具,它是SSH(Secure Shell)套件的一部分。
ssh-keygen可以生成几种类型的认证密钥,包括RSA(默认)、DSA、ECDSA、ED25519等。生成的密钥包括一对公钥和私钥。公钥可以公开,而私钥必须保密。任何使用公钥加密的数据,只能使用对应的私钥解密。
以RSA默认方式为例,执行命令:
ssh-keygen -t rsa
然后一直回车,最终在你的用户目录下的.ssh目录(通常是~/.ssh/)生成两个文件:
id_rsa.pub:公钥文件,这个公钥添加到任何你需要访问的远程服务器。服务器会使用这个公钥来加密发送给你的数据,以及验证你发送的数据的签名。
id_rsa:私钥文件,这个文件必须保密,不应该被任何人获取。你的SSH客户端会使用这个私钥来解密服务器发送的数据,以及对你发送到服务器的数据进行签名。
常用方法
删除远程服务器的SSH公钥
ssh-keygen -R example.com
查看远程服务器的SSH公钥
cat ~/.ssh/known_hosts
查看SSH客户端支持的公钥类型
ssh -Q key
写到最后
如果文章中有不对或者不严谨的地方,还请大家批评指正~~
如果这篇文章能解答你的疑惑,给个点赞和关注吧~~