由于经常需要同时在远程服务器上写代码加同步文件,又了解到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 所被赋予的值,就可以区分不同的私钥。