项目协同开发-配置SSH

如果你是GitHub/Gitee的个人开发者用户,你一定用过Git clone。当然,你可能见过SSH clone,但不一定常用到。但如果你是一个算法工程师,或是已经参加一些大型项目,需要频繁登录远程服务器,那你一定曾为输入密码而苦恼——为了确保服务器的安全,每次登录服务器都需要手动输入密码。这时候,就需要SSH的帮助了。

漫漫开发长路,恭喜你,了解SSH,这是你从象牙塔走入实际开发的第一步。

什么是SSH?

庞大的互联网如同一个黑暗森林,里面有无数虎视眈眈的坏人盯着你的服务器/数据。为了保护自己的宝贵财产,你需要一个强大的安全机制,在防止外人随意进出你的服务器的同时,又能让你信任的人可以不那么费劲的进来。这个安全机制就是SSH(Secure Shell)。

SSH允许两台电脑之间通过安全连接进行数据交换,并通过加密来保证数据的保密性和完整性。它最常用的场景是远程登录和文件传输。现在你可能可以理解GitHub中提供的两种clone方式:Git clone是任何人都可以使用的克隆指令,但SSH clone只有项目拥有者才能使用,因为需要添加SSH Key。

什么是SSH Key?

SSH通过公钥和私钥来进行加密。Github上,我们把公钥保存在服务器上,这样我们需要克隆文件的时候,文件会被公钥加密。当我们将代码拉到本地时,使用私钥进行解密。

使用SSH进行免密登录

前面提到SSH最常用在远程登录和文件传输,这也是算法工程师在远程服务器训练时必备的登录方式。通过密钥认证,就不需要每次手动输入密码。

它的原理是将客户端和服务器交换密钥,当发起登录请求时,双方动态生成一个会话的密钥和会话的ID,建立一个加密通道。远程服务器使用公钥加密一个随机数,发送至本地客户端。客户端使用自己的私钥进行解密后,再用保存的服务器的公钥加密后发回服务器。服务端接到信息后再用服务端私钥解密,如果解密的随机数与自己发送的随机数相同,则验证通过。

这个过程像是乒乓球一样你来我往。

在GitHub中配置SSH

要实现在GitHub中配置SSH,需要现在本地创建公钥-私钥对:

在命令行中输入

1
ssh-keygen -t rsa

随后需要进行三次回车

可以看到密钥被保存在/.ssh/路径下

我们输入

1
cat ~/.ssh/id_rsa.pub

就可以查看rsa密钥,也就是公钥。接下来我们就可以复制这个密钥,将它添加到代码仓库中。OK,大功告成!

使用VSCode配置SSH免密登录

  1. 首先需要安装Remote-SSH插件

  2. 点击左下角绿色箭头==>Connect to Host==>Add New SSH Host

  3. 需要将本地的密钥发送到远程服务器。以autodl的服务器为例:如connect.southb.gpuhub.com,端口号: 29967 账户:root

在Git Bash输入

1
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 29967 root@connect.southb.gpuhub.com

这将会把本地公钥发送至服务器。

  1. 确认之后需要输入服务器密码,输入的时候不会显示密码

  1. 在VSCode-远程资源管理器-SSH-新建远程 输入ssh -p 29967 root@connect.southb.gpuhub.com 并回车,服务器配置将被保存在VSCode的配置文件。
  2. 现在刷新一下,你就可以在远程资源管理器中见到这个服务器了。未来登陆时也不再需要重复输入密码。

配置SSH端口映射

有的时候在服务器上部署服务时,想要在本地调用服务,那就需要进行端口映射了。我们以ssh -p 46206 root@connect.westb.seetacloud.com为例,如果设置的服务器端口是8501,只需要在命令行中输入以下代码,即可将服务器的端口映射到本地的8501端口。此时运行localhost:8501即可启动服务。

1
ssh -L 8501:172.17.0.2:8501 -p 46206 root@connect.westb.seetacloud.com

2023/12/28 于苏州家中