SSH 是一组用于登录远程主机的通讯协议,透过该协议登录后,可以在本地电脑上映射远程主机的终端环境,并操作远程主机上的文件。除终端环境外,SSH 协议还可以
习惯上,称本地主机为客户端(Client),称被连接的远程主机为服务端(Server)。
这些操作系统一般内建了 SSH 客户端,可以直接在终端窗口中输入 ssh -V 查看,示例:
alan@Alan-MagicBook:~$ ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.4, OpenSSL 1.0.2n 7 Dec 2017
自 1809 更新后 Windows 10 已内建了 SSH 客户端支持,但可能需要手动启用。首先在 CMD 中输入 ssh -V 确认是否已经启用该功能,若提示找不到命令,则需要手动启用:
打开 Windows 设置 → 应用 → 应用和功能 → 可选功能
点 添加功能 ,找到 OpenSSH 客户端,点击安装
根据提示完成安装后,在 CMD 环境下测试是否可用。
更早版本的 Windows 系统
针对这些操作系统,你应该首先考虑升级你的系统。或者选择以下两种方式之一:
SSH 连接远程主机时,至少需要知道用户名、用户密码、主机地址、端口四个参数,请向管理员询问。然后打开终端窗口,输入:
ssh [用户名]@[主机地址] -p [端口]
根据提示输入用户密码(在终端输入密码时可能不会回显)。若询问是否信任新的证书指纹,输入 yes 。
示例:
C:\Windows\system32>ssh [email protected].**.** -p 22
wy@*.*.*.*'s password:
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-28-generic x86_64)
wy@zhougroup-1080Ti:~$
至此已经登录服务端,可以在该终端中进行操作。
总体上,使用 SSH 不需要进行什么特别的配置。但以下几个基础配置可以显著提高 SSH 易用性,推荐操作。
默认情况下,SSH 通过密码进行用户认证,但每次都输入密码有诸多不便;此外为了安全,管理员可能手动禁用基于密码的认证方式。SSH 另外提供了基于秘钥的认证方式。注意!不要为了方便给账户设置简单密码!
在客户端生成秘钥。客户端秘钥的默认保存地址为 ~/.ssh/id_rsa 与 ~/.ssh/id_rsa.pub ,针对 Windows 系统,则是 C:\Users[用户名].ssh\id_rsa 与 C:\Users[用户名].ssh\id_rsa.pub 。若本机已有秘钥,跳过本步;否则在终端输入 ssh-keygen -t rsa -C “LocalKeyPair” ,然后一路回车。注意,如果是 Windows 系统,尽量保证秘钥路径不包含中文。示例:
C:\Windows\system32>ssh-keygen -t rsa -C "LocalKeyPair"
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\Alan/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:/Users/Alan/.ssh/id_rsa.
Your public key has been saved in C:/Users/Alan/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7fiW5By4HeBoXb75*****igjGjz6pbUL6eRzI8WllI4 LocalKeyPair
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . |
| o . ..o |
| = o +S*.. |
| .E.= o =oB . |
| B.o. .X.B o |
| =oB+.o o.X . . |
|..*=o+ o ..... |
+----[SHA256]-----+
在服务端导入公钥。首先根据上一节的步骤登录远程主机,然后修改远程主机的 ~/.ssh/authorized_keys 文件(若不存在该目录或者不存在该文件,请手动创建)。将第一步中创建的 ~/.ssh.id_rsa.pub 文件内容添加进 authorized_keys 文件中,最后设置合适的权限。示例:
# 创建对应目录与文件
mkdir ~/.ssh && touch ~/.ssh/authorized_keys
# 修改 authorized_keys,将客户端创建的 ~/.ssh/id_rsa.pub 文件粘贴进去
vi ~/.ssh/authorized_keys
# 设置权限
chmod 600 ~/.ssh/authorized_keys
在客户端进行配置。修改本机的 ~/.ssh/config 文件(若不存在手动创建),添加以下配置:
Host lab
HostName [主机地址]
Port [端口]
User [用户名]
IdentityFile ~/.ssh/id_rsa
之后在终端可以通过主机助记符登录远端: ssh lab 。示例:
C:\Windows\system32>ssh lab
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-28-generic x86_64)
wy@zhougroup-1080Ti:~$
防止 SSH 连接自动中断
在客户端 ~/.ssh/config 中添加以下配置:
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
SFTP 是 SSH 协议的附加组件,可以用来实现客户端与服务端互传文件。有两种方式使用:命令行,或者第三方 GUI 软件。
假设已经完成上一节的免密码登录配置,则可以轻松地通过 sftp lab 命令登录远程。示例:
C:\Windows\system32>sftp lab1
Connected to lab1.
sftp>
以下是几条基本的命令:
更改当前工作路径 lcd cd
显示当前工作路径 lpwd pwd
列出当前目录文件 lls ls
创建目录 lmkdir mkdir
从本地上传文件 put [本地文件路径] -
从远程下载文件 get [远程文件路径] -
从本地上传文件夹 put -r [本地路径] [远程路径] -
从远程下载文件夹 get -r [远程路径] [本地路径] -
VS Code 可以透过 SSH 通道开启一个映射,将远程主机某个工作目录映射到 VS Code 中,在本地形成一个虚拟空间。此时在 VS Code 中进行的修改会与远程同步,远程的修改也会体现在本机的 VS Code 窗口中。此外还支持直接在本机进行代码调试与检查。
首先安装插件。在插件列表搜索 remote ,找到 Remote - SSH 插件,点击安装。完毕后可能需要重启 VS Code。
点击底栏最左侧的按钮,在顶部弹出窗口中选择 Remote-SSH: Connect to Host ,并在列表中选择远程主机名(这里假设已经完成 SSH 免密登录配置)。
点击打开文件夹,输入路径即可打开远程目录。自此在 VS Code 中做的编辑与文件操作将同步到远程主机。
注意,某些本地插件需要在远程主机重新安装。在插件列表中找到对应插件,点击 在 SSH:lab 中安装 字样。安装后可能需要重载 VS Code。