-
Notifications
You must be signed in to change notification settings - Fork 6
Windows 下安装配置 OpenSSH 并通过 VSCode SSH 连接 #84
Description
参考资料
- 安装 OpenSSH
- 配置 Shell
- 配置连接
- 其他
下载及安装
软件下载
先去 Releases 页面下载最新版的 OpenSSH,注意要下载 64 位版本的。
下载之后将其复制到服务器上,并将压缩包里的文件解压至 C:\Program Files\OpenSSH 目录下。
软件安装
用管理员权限运行 PowerShell,定位至 OpenSSH 所在目录,执行下面的命令来安装 OpenSSH:
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1如果能够看到下图中的绿色提示文字,说明 OpenSSH 客户端及服务端安装成功。
然后执行下面的命令,在防火墙中为 sshd 开启 22 端口 TCP 请求的权限。当然也可以在这里把 22 换成别的不常见的端口,不过记得在后面 sshd 的配置中也对应修改。
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22基本配置
软件运行
执行 net start sshd,启动 SSH 服务端的服务 sshd。初次运行的话,会在 %programdata%\ssh 目录下自动生成 host keys。
执行 Set-Service sshd -StartupType Automatic,可将 sshd 服务设置为开机自动启动。
设置默认 Shell
下面的命令,可以将 PowerShell 设置为 SSH 的默认 Shell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "/c" -PropertyType String -Force如果要将 Git Bash 设置为默认 Shell,则执行下面的命令:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force这里要注意,虽然 Git Bash 在 Windows 下的快捷方式指向的是 c:\Program Files (x86)\Git\git-bash.exe,但它调用的其实是 c:\Program Files (x86)\Git\bin\bash.exe。如果在上面的命令中,把 Bash 的可执行程序路径设置为前者,则 SSH 连接到服务器之后会无法操作;只有设置为后者,才能正常操作。
还要注意,如果配置 Git Bash 为默认 Shell 后连接失败,需要查看注册表 "HKLM:\SOFTWARE\OpenSSH" 路径下是否有一项 "DefaultShellCommandOption" 并且值为 "/c",如果存在的话需要将这一项删掉,因为这一项是只在 PowerShell 为默认 Shell 下才需要的,如果默认 Shell 为 Git Bash 的话,这一项的存在会导致 VSCode SSH 插件连接远程服务器失败。
云服务器安全组开放对应端口
在阿里云服务器的安全组中,给 SSH 的端口的 TCP 请求开放对应权限。在办公室的时候,用不同的网站查 IP,会分属不同的运营商,如果用一个网站查的 IP 会 SSH 失败,那就再试试另一个网站查到的 IP,多试几个总有一个能用的。
测试连接
在本地用 ssh -v username@hostip -p customport 这样的命令连接服务器,该命令中各参数含义如下:
-v:该参数用于详细列出连接过程,以便调试username:通过用户名 + 密码的方式来 SSH 连接时,在这里输入用户名hostip:在这里输入服务器 IP 地址-p customport:如果修改了默认端口,在-p参数后面输入对应的端口号,比如 32109
首次连接,会提示一个什么 fingerprint,输入 yes 然后回车,接着会再提示要求输入密码,再输入然后回车,成功的话,就连接到服务器上了。
安全加固
修改端口
为了安全起见,还是应当把默认的 SSH 端口改成别的端口号,需要修改的有三处地方:
- sshd 配置文件,默认在
c:\ProgramData\ssh\sshd_config - Windows 防火墙,在
控制面板\所有控制面板项\Windows 防火墙\允许的应用中,双击OpenSSH Server (sshd),然后输入对应的端口号并保存 - 阿里云服务器的安全组规则设置
使用密钥对连接
在客户端的 %systemdrive%\Users\<user>\.ssh 目录下,执行命令 ssh-keygen -t rsa-sha2-256 -b 2048,来生成密钥对,其中 id_rsa 为私钥,id_rsa.pub 为公钥。
这里用 -t rsa-sha-256 而不是默认的 -t rsa,是因为用默认参数生成的私钥安全性不够(见 SSH without password does not work after upgrading from 18.04 to 22.04 及 SSH server gives "userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]" when connecting with Putty),这样的私钥导入 XShell 后,SSH 连接服务器会失败。
在服务器的 c:\ProgramData\ssh 目录下,创建 authorized_keys 这个文件,将前面生成的公钥的内容复制到该文件中。同时确保该文件只有 System 和 Administrators 用户(组)有完整权限,Authenticated users 有读取和执行权限。
接着重启服务器上的 sshd 服务。
然后在客户端使用命令 ssh -v -i id_rsa username@hostip -p customport 来连接服务器,正常情况下应当是可以连接成功的。
为了能够方便连接,可以在客户端编辑 ~\.ssh\config 文件,将 SSH 连接设置为如下配置:
Host ECS1
HostName 1.2.3.4
User abc
Port 65535
IdentityFile ~/.ssh/id_rsa
这样 VSCode 会自动识别该配置文件,连接远程服务器的时候就会很方便了。
