# Linux SSH 登录配置

随笔 5 / 8
阅读约需 3 分钟
目录

本文基于 Ubuntu 22.04 LTS (openssh-server < 1:9.0p1-1ubuntu1) 版本。

安装 OpenSSH Server

通常情况下,常用的 Linux 发行版在系统部署阶段都可以选择安装 OpenSSH Server,如果没有安装,可以通过包管理器安装。

Debian/Ubuntu
sudo apt update
sudo apt install openssh-server
CentOS/RHEL
sudo yum install openssh-server

配置文件

配置文件路径

  • /etc/ssh/sshd_config:OpenSSH Server 配置文件
  • /etc/ssh/sshd_config.d/*.conf:推荐的用户配置文件目录

常用配置项

配置项说明默认值
PortSSH 服务监听端口22
PermitRootLogin是否允许 root 用户登录prohibit-password
PasswordAuthentication是否允许密码登录yes
MaxAuthTries最大尝试次数6
MaxSessions最大会话数10
PubkeyAuthentication是否允许公钥登录yes
PasswordAuthentication是否允许密码登录yes
KbdInteractiveAuthentication是否允许键盘交互式认证yes
UsePAM是否使用 PAM 模块yes
PrintMotd是否显示登录信息yes
SysLogFacility日志设施AUTH
LogLevel日志级别INFO

配置密钥登录(与禁用密码登录)

生成密钥对

Terminal window
ssh-keygen -t rsa -b 4096 -C "name@example.com"

根据交互式终端可以选择修改生成位置,添加私钥密码锁。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/name/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/name/.ssh/id_rsa
Your public key has been saved in /home/name/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:u4Y6/xXU8wi7DHmiZLEFozRI7JjyX+I7nG12mf/RK/o name@machine
The key's randomart image is:
+---[RSA 4096]----+
| o..o o |
| o. o o . |
| + . . . o o |
|+ . + o o + |
|.. + S + . . |
| . .o.. * o . |
| + =...o+ . . |
| B = =o .. . |
| oO.+o.o+E.. |
+----[SHA256]-----+

如果在服务端进行这一步,密钥对会生成在 ~/.ssh 目录下。使用 RSA 算法时默认输出的文件是 id_rsa(私钥) 和 id_rsa.pub(公钥)。

如果在客户端进行,则需要将生成的公钥文件传输到服务端。

安装公钥

将公钥传输到所需服务器的 ~/.ssh 目录中。然后导入到 authorized_keys 文件中。

Terminal window
ls ~/.ssh
# authorized_keys id_rsa id_rsa.pub known_hosts
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

sshd_config

Terminal window
# 修改端口
# 别忘了开放修改的防火墙端口。
Port 12345
# 启用公钥登录
PubkeyAuthentication yes
# 安全性配置
PermitRootLogin no
MaxAuthTries 3

修改完后重启 sshd 服务。使用密钥登录一次确认无误后,再禁用密码登录。

Terminal window
# 禁用密码登录
PasswordAuthentication no
## 需要同时关闭交互式密码验证和 PAM 模块,否则仍然可以使用密码登录
KbdInteractiveAuthentication no
UsePAM no
下一篇: JavaScript JSON 笔记
写下此篇时暂时不是懒狗的星语

这是开发的责任感和前瞻性的问题。不兼容的改变不应该轻易被加入到有许多依赖代码的软件中。升级所付出的代价可能是巨大的。
—— 《语义化版本》


随笔 系列