注:以下教程默认读者已经会在命令行使用ssh或是会在vscode上使用ssh插件连接服务器,而只是嫌每次输入密码麻烦。如果还没有配置或是使用过ssh,则先看以下教程配置ssh
Get started with OpenSSH for Windows
配置免密登录的核心思路就一句话:在本地用 ssh key_gen 生成密钥和公钥,把公钥放到服务器的 ~/.ssh/authorized_keys 文件里即可。
为了方便叙述,进行以下假设:
在windows上的用户名为 win_jack
,在服务器的用户名为 linux_jack
服务器的ip为1.2.3.4
,端口为 5678
即,你可以使用 ssh linux_jack@1.2.3.4 -P 5678
登录你的服务器 (Port如果没有可以不写)
case1: basic case
生成密钥对
Windows 打开 cmd
输入:ssh-keygen
连续回车或者根据提示确定生成的私钥公钥存放的路径。默认(就是一路回车)会在 C:\Users\your_username\.ssh
目录下生成公钥和私钥。
id_rsa:私钥
id_rsa.pub:公钥
打开id_rsa.pub文件,把其中的所有内容复制到服务器的 ~/.ssh/authorized_keys
里,即:
1. ssh linux_jack@1.2.3.4 -P 5678
2. $ vim ~/.ssh/authorized_keys
3. 复制刚刚生成的id_rsa.pub里的所有内容
4. :wq
打开本地的 C:\Users\win_jack\.ssh\config
文件,输入:
Host EPCC # 服务器名称
HostName 1.2.3.4
User linux_jack
Port 5678
IdentityFile "C:\Users\win_jack\.ssh\id_rsa"
其中xx部分要自己填写
case2: 在集群中需要ssh到其他节点
例如我先ssh到1080ti这个集群上,然后在集群上需要跳转到1080ti-03这个gpu节点,则 C:\Users\user\.ssh\config
需要改成如下:
Host 1080ti
HostName 202.120.xx.xx
User linux_jack
IdentityFile "C:\Users\win_jack\.ssh\id_rsa"
ServerAliveInterval 60
Host 1080ti-03
HostName 1080ti-03
RequestTTY force
User linux_jack
ProxyCommand ssh 1080ti nc 1080ti-03 22 #这行最重要
IdentityFile "C:\Users\win_jack\.ssh\id_rsa"
ServerAliveInterval 60
case3: 需要使用跳板机
例如现在在sjtu,而想访问zju的内网中的一台服务器,则需要借助跳板机
普通的ssh的命令如下:
ssh -J js@carlzhang4.top:xxx xxx@192.168.xx.xx
其中js@carlzhang4.top:xxx
是跳板机
则 C:\Users\win_jack\.ssh\config
需要改成如下:
Host r5
HostName 192.168.xx.xx
User xxx
ProxyJump js@carlzhang4.top:xxx #这行最重要,指定了跳板机
IdentityFile "C:\Users\win_jack\.ssh\id_rsa"
到此,vscode的可以免密登录所有的服务器了