Skip to content

免密登陆

免密登录服务器

命令行登陆

ssh:secure shell protocol,以更加安全的方式连接远程服务器,默认端口号是 22

  • 安装 cygwin 或 mingw(git 自带)
bash
$ ssh xx.xx.xx.xx

也可以直接使用 FinalShell、MobaXterm 或 XShell 等工具进行连接

免密登陆

如下方法是直接用命令行操作

  1. 安装 Remote - SSH 插件,即可在 VSCode 中进行配置

  2. 配置别名快速登录:ssh-config(也可以直接找到本机的 .ssh 配置进行修改)

    Ctrl + Shift + P,之后输入 ssh

    image-20231124085538013

    点击配置 SSH 主机,随后的弹出框一般情况下点击一个就行

    image-20231124085656952

    之后输入如下配置

    bash
    Host lyn
      HostName xx.xx.xx.xx
      User root
    
    # 就可以直接登陆了(需要输入密码)
    $ ssh lyn
  3. 之后我们希望能免密快速登录

    bash
    # 提示你输入密码,成功后可以直接 ssh 登陆
    $ ssh-copy-id lyn
    
    # 就可以直接登陆了(无需输入密码)
    $ ssh lyn
  4. 如果是服务器与服务器之间进行免密登陆,可以使用如下命令

    bash
    $ ssh-copy-id root@xx.xx.xx.xx

免密登陆条件

  1. 两个文件:本地环境的 ~/.ssh/id_rsa.pub 与远程服务器的 ~/.ssh/authorized_keys
  2. 一个动作:把本地文件 ~/.ssh/id_rsa.pub 中内容复制粘贴到远程服务器远程服务器 ~/.ssh/authorized_keys

image-20220711141350038

免密克隆项目(Github)

首先可以检查网络与 GitHub 是否是通的,如果通的可以直接 git clone https:xxx

bash
$ ping github.com
正在 Ping github.com [20.205.243.166] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
20.205.243.166 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

生成秘钥

若 HTTPS 持续失败(如上),可以切换使用 SSH 协议

  • 2018年以前的版本中默认使用的是 RSA-2048 算法,但是这个秘钥长度较短存在潜在安全风险(如抗量子攻击能力弱,使用量子计算机破解可能仅需数小时)
  • 2018-2020年转向更安全的 RSA-4096 算法,但仍非强制默认
  • 2020年之后优先推荐 Ed25519 算法(基于椭圆曲线 Curve25519,抗侧信道攻击,秘钥更短)
bash
$ ssh-keygen -t ed25519 -C "your_email@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/Admin/.ssh/id_ed25519):
Enter passphrase for "/c/Users/Admin/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Admin/.ssh/id_ed25519
Your public key has been saved in /c/Users/Admin/.ssh/id_ed25519.pub

添加公钥到 Github

复制 ~/.ssh/id_ed25519.pub 内容,粘贴到 GitHub SSH Keys 页面

测试 SSH 连接,可能会出现如下情况

bash
# 失败
$ ssh -T git@github.com
ssh: connect to host github.com port 22: Connection timed out

# 成功
$ ssh -T git@github.com
Hi llwodexue! You've successfully authenticated, but GitHub does not provide shell access.

失败的的需要修改 SSH 端口,因为 SSH 默认端口被防火墙屏蔽了(22),这里可以改用 HTTPS 端口(443)

bash
$ vim ~/.ssh/config
Host github.com
  Hostname ssh.github.com
  Port 443
  User git

如果 443 也被屏蔽了建议不要使用 SSH 协议,改用 HTTPS 协议,Windows 可以修改 hosts 文件,增加 github.com 的域名映射

bash
20.205.243.166 github.com

常备不懈,才能有备无患