SSH 远程连接入门
SSH(Secure Shell)是远程登录 Linux 主机最主流的协议,在不安全的公共网络上,为客户端和远程主机之间的通信提供加密和身份验证。日常说的“连服务器”,绝大多数情况下就是通过 SSH 建立的连接。
最基础的连接方式
Section titled “最基础的连接方式”ssh username@hostname # 使用密码登录ssh username@hostname -p 2222 # 指定非默认端口(SSH 默认端口为 22)首次连接一台此前从未连接过的主机时,客户端会显示这台主机的公钥指纹,并询问是否信任、继续连接——这是 SSH 防止连接被中间人劫持的机制之一,确认后指纹会被记录到本机的 ~/.ssh/known_hosts 文件中,之后再次连接同一台主机不会重复询问,但如果对方主机的密钥发生变化(可能意味着遭遇了中间人攻击,也可能只是主机重装或密钥被主动更换),会收到明显的警告提示。
密码登录与密钥登录
Section titled “密码登录与密钥登录”密码登录需要每次连接手动输入远程主机的用户密码,除了操作繁琐之外,也存在密码可能被暴力破解的风险。密钥登录基于非对称加密,是更推荐的方式:
- 在本机生成一对密钥(私钥和公钥):
ssh-keygen -t ed25519,按提示选择保存路径(默认即可),可以选择性设置一个密钥口令(Passphrase) - 把公钥内容添加到远程主机的
~/.ssh/authorized_keys文件中,最简单的方式是执行ssh-copy-id username@hostname,它会自动完成这一步 - 之后再连接这台主机,客户端会用本机的私钥完成一次加密握手证明身份,不再需要输入远程主机的密码
私钥文件(默认是 ~/.ssh/id_ed25519)绝对不应该离开本机、也不应该分享给他人——公钥可以公开,私钥是身份凭证本身。设置密钥口令,是为了防止私钥文件本身被盗(例如设备丢失)之后被直接冒用;口令本身只在本机验证,不会经过网络传输。
用配置文件简化重复连接
Section titled “用配置文件简化重复连接”需要经常连接同一台主机、或者需要维护多台主机的连接信息时,把连接参数写进 ~/.ssh/config 文件比每次手动拼接完整命令更高效:
Host myserver HostName 203.0.113.10 User deploy Port 2222 IdentityFile ~/.ssh/id_ed25519配置好之后,直接执行 ssh myserver 即可,Host 后面的名称是本地起的别名,HostName 才是实际连接的地址。这个文件可以为不同主机分别配置对应的用户名、端口、私钥路径,避免每次都要输入完整参数。
文件夹~/.ssh/
- id_ed25519 私钥,权限必须严格限制
- id_ed25519.pub 公钥,可以公开分享
- known_hosts 记录已连接过的主机指纹
- config 主机别名与连接参数配置
SSH 连接的信任关系由两部分组成:本机通过 known_hosts 确认远程主机身份没有被冒充,远程主机通过密码或密钥确认发起连接的一方拥有相应凭证。密钥登录相比密码登录,在安全性和使用便利性上都更有优势,是绝大多数正式使用场景下的推荐做法。