Skip to content

SSH Configuration On Server

服务端设置

1. 首先我们打开SSHD服务配置,打开指定认证用配置

$ vim /etc/ssh/sshd_config

将默认注释符(#)去掉即可,内容如下

Protocol 2
PermitRootLogin yes

RSAAuthentication yes 
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Port:指定端口号为22

Protocol:指定ssh协议版本为2

PermitRootLogin:允许root账号登录

RSAAuthentication:开启rsa安全验证

PubkeyAuthentication:开启公钥认证

AuthorizedKeysFile:设置用户公钥文件存储位置

2. 接着保存并重启SSHD服务,让配置生效

$ service sshd restart

由于AuthorizedKeysFile设置的公钥存放路径是.ssh/authorized_keys,实际上是home目录下用户目录,而我们是用git用户,所以目标目录应该是/home/git/.ssh/authorized_keys

$ mkdir /home/git/.ssh

3. 创建完成后将拥有者修改为git

$ chown -R git:root /home/git/.ssh

客户端设置

1. 首先,在客户端创建一个SSH连接密钥,指定验证方式是RSA (默认为DSA加密算法)

$ ssh-keygen -t rsa 
创建了公钥和私钥,会提示保存位置,如不想改变密钥位置且无密码,几次确认后,和Linux类似,会保存到当前用户下的.ssh目录,默认为id_rsa和id_rsa.pub文件。

2. 接着,将客户端公钥导入服务器端(将IP替换为服务器IP地址)

$ ssh git@IP 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

3. 确认时还需要输入git用户密码,成功后回到服务器端查看是否存在authorized_keys文件,并修改权限

$ chmod 700 /home/git/.ssh
$ chmod 600 /home/git/.ssh/authorized_keys

4. 客户端上再次clone仓库(将IP替换为服务器IP地址,仓库目录改成指定仓库目录),测试是否成功

$ git clone git@IP:/opt/code/test.git

5. 成功后,限制git用户通过SSH登录服务器,编辑/etc/passwd文件

$ vim /etc/passwd
找到git用户的记录,将其中默认的/bin/bash改更为/bin/git-shell,实际如下
git:x:1001:1001::/home/git:/usr/bin/git-shell

6. SSH修改端口号

使用ssh默认的端口号存在不安全,被暴力破解的风险,为提高安全性,考虑修改ssh端口号。

(1). 修改/etc/ssh/sshd_config

参考第一步,修改文件中Port 后面的端口号为XXX,切勿与其他服务冲突

(2). 打开防火墙

防火墙默认阻断所有端口,需要打开ssh的新端口 firewall-cmd --zone=public --add-port=XXX/tcp --permanent

(3). 设置SELinux

在启用SELinux的系统上,未正确配置SELinux将导致sshd服务因权限不足无法正常开启。 semanage port -a -t ssh_port_t -p tcp XXX

  • 上述XXX均为端口号

REF

[1]. https://zhuanlan.zhihu.com/p/40371444

[2]. https://liqimore.com/2020/change-default-ssh-port-for-centos/