SSH 登录远程主机
本文最后更新于 2023年6月17日 晚上
安全外壳协议(Secure Shell Protocol,简称 SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH 通过在网络中创建安全隧道来实现 SSH 客户端与服务器之间的连接。SSH 最常见的用途是远程登录系统,人们通常利用 SSH 来传输命令行界面和远程执行命令。SSH 使用频率最高的场合是类 Unix 系统,但是 Windows 操作系统也能有限度地使用 SSH。2015 年,微软宣布将在未来的操作系统中提供原生 SSH 协议支持,Windows 10 1803 版本已提供 OpenSSH 工具。[1]
准备远程地址
SSH 需要远程主机的 IP 地址。如果远程主机有固定的 IP 地址,那再好不过了。如果远程主机的 IP 地址是动态的,那么需要动态 IP 解析服务。可以找一些 DDNS 服务商,它们的服务原理是每次你的机器访问一个特定的网址,网站会记录此次访问的 IP 地址,并更新解析记录。或者,也可以自己写脚本,定时获取本机 IP 地址并推送到 DNS 权威服务器上。笔者的机器有固定 IPv4,并采用后一个方案更新动态 IPv6。
如果你有固定 IP,但是是绑定在路由器上的,那么需要在路由器后台管理处做端口映射。SSH 默认使用的是 22 端口,但是也可以映射到其他端口并用 -p
开关手动指定。或者,也可以将远程主机放到 DMZ 中,自动转发所有端口,但是此举可能使远程主机容易遭受攻击。
如果你有域名,也可以到 DNS 管理处添加一条指向远程主机 IP 地址的记录,这样可以通过自定义域名而不是 IP 地址访问远程主机。每次 IP 地址发生变化,只要域名能够正确解析,也不需要每次重新配置 SSH。
SSH 登录到远程主机
macOS 需要在系统设置中打开「远程登录」。macOS 12 及以下在「共享」面板可以找到这项设置,macOS 13 及以上在「通用 - 共享」面板可以找到这项设置。
使用以下命令登录到远程主机:
1 |
|
如果你配置了自定义域名:
1 |
|
如果远程用户的用户名恰好与本机当前用户的用户名一致,可以省略用户名和「@」符号:
1 |
|
如果远程用户设置了密码,登录过程也会要求输入密码。
操作完成后,使用 logout
或者 exit
命令退出登录并断开连接。
使用公钥登录远程主机
可以将登录凭据保存到远程主机,以避免每次登录都输入密码。
首先生成 SSH 密钥对,此操作与连接 GitHub 的操作类似。
检查现有的 SSH 密钥
在你生成一个新的 SSH 密钥之前,你应该检查你的本地机器是否存在密钥。
打开终端,输入 ls -al ~/.ssh
查看现有的 SSH 密钥是否存在。
1 |
|
检查目录列表,看看你是否已经有一个公共的 SSH 密钥。
提示:如果你收到 ~/.ssh
不存在的错误,你在默认位置没有现有的 SSH 密钥对。你可以在下一步创建一个新的 SSH 密钥对。
如果你没有支持的公钥和私钥对,或者不希望使用任何可用的公钥和私钥对,那么就生成一个新的SSH密钥。
如果你看到一个现有的公钥和私钥对(例如,id_rsa.pub
和 id_rsa
),你可以直接使用它们而不创建新的密钥对。
生成一个新的 SSH 密钥
检查完现有的 SSH 密钥后,你可以在你的本地机器上生成一个新的 SSH 密钥。
打开终端,粘贴下面的命令,并将电子邮件替换成你的 GitHub 电子邮件地址。
1 |
|
这将创建一个新的 SSH 密钥,采用 RSA 加密方式,存储文件名为 filename
,并备注 “Remark”。
将公钥拷贝到远程主机
1 |
|
按提示操作并输入密码。操作完成后,登录一次以确保配置成功。这样,以后便可直接登录这台主机而不用再输入密码。