Linux SSH使用秘钥登录

创建密钥

1
2
3
4
5
6
7
8
9

cd ~/.ssh
# -t表示加密方式,-C密钥的注释,-f生成指定文件名的密钥对
ssh-keygen -t ecdsa -C "Key_for_Github" -f ~/.ssh/id_rsa
mv id_rsa.pub authorized_keys # 导入公钥

# Enter file in which to save the key (/home/xxx/.ssh/id_rsa): # 建议直接回车使用默认路径
# Enter passphrase (empty for no passphrase): # 输入密码短语(直接回车则留空)
# Enter same passphrase again: # 重复密码短语

此时在 ~/.ssh/ 目录下生成了2个文件,id_rsa为私钥,id_rsa.pub为公钥。
私钥自己下载到本地电脑妥善保存(丢了服务器可就没法再登陆了),
为安全,建议删除服务器端的私钥。公钥则可以任意公开。

修改配置文件

1
2
3
4
5
6
sudo vim /etc/ssh/sshd_config

PasswordAuthentication no # 禁用密码验证
PubkeyAuthentication yes # 启用密钥验证
PermitRootLogin no # 禁用root登录
PermitEmptyPasswords no # 禁用空密码登陆

重启SSH服务

1
2
# 重启SSH服务前建议保留一个ssh会话以防意外
sudo systemctl reload sshd.service

其他设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Port    22                  #默认端口
ListenAddress IP #监听服务器端的IP,ss -ntl 查看22端口绑定的iP地址
LoginGraceTime 2m #登录时不输入密码时超时时间
HostKey # HostKey本地服务端的公钥路径
UseDNS no #禁止将IP逆向解析为主机名,然后比对正向解析的结果,防止客户端欺骗
PermitRootLogin yes #是否允许root使用SSH远程登录
MaxAuthTries 6 #密码错误的次数6/2=3(MAN帮助中写明要除2)次后断开连接
MaxSessions 10 #最大的会话连接数(连接未登录的会话最大值,默认拒绝旧的连接未登录的会话)
StrictModes yes #检查用户家目录中ssh相关的配置文件是否正确
PubkeyAuthentication yes #是否使用基于key验证登录
AuthorizedKeysFile .ssh/authorized_keys #key验证登录的客户端公钥路径
PasswordAuthentication yes #是否允许使用密码登录
PermitEmptyPasswords no #用户使用空口令登录
GatewayPorts no #启用网关功能,开启后可以将建立的SSH隧道(端口转发)共享出去
ChallengeResponseAuthentication no #关闭质疑-应答模式
ClientAliveCountMax 3 #探测3次客户端是否为空闲会话,↓3*10分钟后断开连接
ClientAliveInterval 10 #空闲会话时长,每10分钟探测一次
MaxStartups 10:30:100 #start:rate:full;当连接但为进行认证的用户超过10个,drop30%(rate/full)的连接当连接但未登录的连接达到100个后,新建立的连接将被拒绝
Banner /path/file #认证前输出的登录提示信息,指定文件路径
GSSAPIAuthentication no
AllowUsers username #白名单,如果白名单有用户只有白名单的用户可以登陆
DenyUsers #黑名单,被拒绝的用户,如果即允许又拒绝则拒绝生效
AllowGroups #组白名单
DenyGroups #组黑名单

登陆方式

  1. 直接指定私钥

ssh -i /pi/.ssh/id_rsa pi@192.168.1.1 -p 22

  1. 默认私钥路径

SSH默认的公钥私钥路径为 ~/.ssh/ 下的id_rsa和id_rsa.pub文件。
把公钥放置到远端服务器的~/.ssh/authorized_keys中然后直接ssh会认证失败的
需要把它的私钥放置到路径~/.ssh/id_rsa,然后再SSH才能成功:ssh pi@192.168.1.1