Visual Studio Code-Remote-SSH 密钥对连接方法

由于经常需要同时在远程服务器上写代码加同步文件,又了解到VScode的Remote-SSH功能同时满足这两项需求,所以写下这篇文章记录使用方法。

生成公钥与私钥

使用SSH的密钥连接需要创建一对钥匙:

1
2
3
ssh-keygen -t rsa -b 4096  
// 创建一对公钥和私钥(rsa加密,4096长度)
// 秘钥储存位置,默认是'~/.ssh'

注意:如果电脑中没有ssh-keygen命令,则需要安装 OpenSSH 才能运行上述命令

生成一对密钥后,在目标文件夹(’~/.ssh’)下生成了两个文件:

1
2
id_rsa      // 私钥(放在本地)
id_rsa.pub // 公钥(配置到服务器)

将公钥上传给服务器端

对于上传方和接受方操作系统的不同,可分为以下几种命令串:

1.本地系统(Windows)=>服务器系统(macOS or Linux)

1
2
3
$USER_AT_HOST="服务器账户名@服务器IP"    // 使用你自己的服务器IP与登录账户
$PUBKEYPATH="$HOME/.ssh/id_rsa.pub" // PUBKEYPATH是你公钥的路径
$pubKey=(Get-Content "$PUBKEYPATH" | Out-String); ssh "$USER_AT_HOST" "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '${pubKey}' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

2.本地系统(Windows )=>服务器系统(Windows )

1
2
3
$USER_AT_HOST="服务器账户名@服务器IP"     // 使用你自己的服务器IP与登录账户
$PUBKEYPATH="$HOME/.ssh/id_rsa.pub" // PUBKEYPATH是你公钥的路径
Get-Content "$PUBKEYPATH" | Out-String | ssh $USER_AT_HOST "powershell `"New-Item -Force -ItemType Directory -Path `"`$HOME\.ssh`"; Add-Content -Force -Path `"`$HOME\.ssh\authorized_keys`" `""

3.本地系统(macOS or Linux)=>服务器系统(macOS or Linux)

1
2
3
export USER_AT_HOST="服务器账户名@服务器IP"    // 使用你自己的服务器IP与登录账户
export PUBKEYPATH="$HOME/.ssh/id_rsa.pub" // PUBKEYPATH是你公钥的路径
ssh-copy-id -i "$PUBKEYPATH" "$USER_AT_HOST"

4.本地系统(macOS or Linux)=>服务器系统(Windows)

1
2
3
export USER_AT_HOST="服务器账户名@服务器IP"   // 使用你自己的服务器IP与登录账户
export PUBKEYPATH="$HOME/.ssh/id_rsa.pub" // PUBKEYPATH是你公钥的路径
ssh $USER_AT_HOST "powershell New-Item -Force -ItemType Directory -Path \"\$HOME\\.ssh\"; Add-Content -Force -Path \"\$HOME\\.ssh\\authorized_keys\" -Value '$(tr -d '\n\r' < "$PUBKEYPATH")'"

配置成功之后,就可以不输入密码自动连接了。

多密钥连接多服务器方法

你可以单使用一对秘钥,将同一个公钥配置到你所有的服务器,然后一个秘钥就可以自动登录所有的服务器。如果你想为服务器配置单一不同的公钥,则你需要生成多对秘钥:

1
2
3
4
// 执行生成不同的秘钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa-remote-ssh // macOS / Linux系统
ssh-keygen -t rsa -b 4096 -f "$HOME\.ssh\id_rsa-remote-ssh" // Windows系统
//-f 参数用来配置秘钥生成的路径及名称

生成后重复上述将公钥上传的操作,然后在你的配置文件 (.ssh/config) 中为你的服务器配置IdentityFile属性,如下:

1
2
3
4
Host              服务器名称
User 登录账户
HostName 服务器IP
IdentityFile 私钥路径

通过上述设置中的 IdentityFile 所被赋予的值,就可以区分不同的私钥。

作者

ScarSika

发布于

2021-03-06

更新于

2021-03-08

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.