SSH 配置

安装确认

这里首先需要保证内部已经处理好 openssh:

1
sudo apt install openssh-server

确认已经挂起生效监听默认的 22 端口:

1
sudo lsof -i |grep ssh

这里出现 *:ssh(LISTEN) 就说明已经有服务开始监听.

生成公密钥

首先绝对不要使用 root 来作为外部SSH访问用户, 而是应该创建非 root 用户来作为登录账号.

这里以我内部的 meteorcat 账号为例, 假设目前登录是该账号

这里需要说明目前主要密钥加密类型:

  • rsa (常规的加密类型, 兼容性最好)
  • ecdsa (新版本的加密类型, 安全性最高,处理最快, 老版本ssh不兼容)

一般来说新系统推荐使用 ecdsa 加密(注意这里不需要 sudo):

1
ssh-keygen -t ecdsa -C "MeteorCat"

这里 -C 设置备注信息, 用于标注密钥的大概信息来配合个生成的公钥使用, 键入之后他会有以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
Generating public/private ecdsa key pair.

# 以下提示说明创建密钥KEY文件, 回车默认就创建在当前登录用户的家目录之下
Enter file in which to save the key (/home/meteorcat/.ssh/id_ecdsa):
Created directory '/home/meteorcat/.ssh'.

# 以下提示说明创建密钥KEY是否还要进行二次密码加密, 回车表示不需要
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

# 后续这里生成公钥和私钥到指定目录下
Your identification has been saved in /home/meteorcat/.ssh/id_ecdsa
Your public key has been saved in /home/meteorcat/.ssh/id_ecdsa.pub

这里处理完成就会在当前登录用户找到公钥和私钥文件:

1
2
3
4
ls -l ~/.ssh
# 以下的显示内容
# -rw------- 1 meteorcat meteorcat 505 Oct 6 23:39 id_ecdsa
#-rw-r--r-- 1 meteorcat meteorcat 171 Oct 6 23:39 id_ecdsa.pub

这里还需要创建记录其他可以登录的用户公钥:

1
2
3
touch ~/.ssh/authorized_keys # 生成放置其他公钥的文件
chmod 600 ~/.ssh/authorized_keys # 设定文件权限
chmod 700 ~/.ssh # 设定文件夹权限

这样公密钥生成就已经完成了.

导入公钥

这里将其他公钥生成内容复制导入到 ~/.ssh/authorized_keys 之中, 一行则为一个公钥, 公钥格式如下:

1
2
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIxxxxxxxxxxxxxxxxxxxxxxxxxx
ecdsa 256-062421

直接附加即可.

配置免密登录

修改指定 ssh 文件:

1
sudo vim /etc/ssh/sshd_config

找到以下内容注释修改:

1
2
3
4
5
6
7
8
9
# 以下内容找到并解除注释
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

# 禁用ROOT登录
PermitRootLogin no

# 禁用密码登录, 最好暂时不要开启这项, 保证能够正常免密登录再开启
PasswordAuthentication no

后续重启系统服务:

1
sudo systemctl restart sshd

后续可以尝试下直接免密登录是否生效.

单独配置

在某些情况之下, 需要单独配置某些账号允许密码登录, 比如小型个人服务器管理账号需要密钥验证, 但是 Git 账号只需要密码拉取.

个人私用服务器个人账号采用密码, 但是 Git Clone 仅仅需要密码拉取, 方便只需安装 Git 就直接输入账号密码拉取,
这里默认已经配置好 git 账号权限等.

这里的 git 账号权限配置在 /etc/passwd 文件内容如下:

1
git:x:1001:1001::/home/git:/usr/bin/git-shell

请确定是否引导到 git-shell 的执行命令下.

确定之后执行编辑命令:

1
sudo cat /etc/ssh/sshd_config.d/git.conf # 创建编辑针对 git 管理员配置

内容如下:

1
2
3
4
Match Group git
Match User git
PubkeyAuthentication no
PasswordAuthentication yes

这里配置项说明:

  • Match Group git: 匹配 Git 管理员组
  • Match User git: 匹配 Git 管理员账号
  • PubkeyAuthentication no: 设置不需要密钥验证登录
  • PasswordAuthentication yes: 设置启用自带的密码登录
  • 其他配置可以根据 /etc/ssh/sshd_config 主文件修改配置, 默认继承主文件配置

配置完之后重启 sshd 即可, 这样就能实现单独 git 输入账号密码进行 git clone 指令.