配置密钥登录

  1. 生成密钥
    1
    ssh-keygen -o -a 256 -t ed25519
  2. 一路回车,要加密码也行
  3. 复制公钥中的内容
    1
    cat ~/.ssh/id_ed25519.pub

远程主机配置

配置公钥

1
2
3
4
5
6
7
cd ~/.ssh # 文件夹不存在就 mkdir ~/.ssh

nano authorized_keys # 编辑 authorized_keys, 将刚刚复制的公钥文件内容粘贴进去, 保存即可

chmod 600 authorized_keys # 配置文件权限

systemctl restart sshd # 重启 SSH 服务

配置 sshd_config

此处命令配置 sshd_config,新机器无脑照搬就行, 有自定义设置的就别直接执行, cat <<'TEXT' > /etc/ssh/sshd_configTEXT 前的内容为 sshd_config 的内容, 自行手动编辑就行,编辑前建议备份一下原来的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.b
cat <<'TEXT' > /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
# 端口, 默认22
#Port 22
# 监听地址相关, 不需修改
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
# Ciphers and keying
#RekeyLimit default none
# 日志
# 指定将日志消息通过哪个日志子系统(facility)发送
SyslogFacility AUTH
# 指定日志等级
LogLevel INFO
# 鉴权
# 限制用户必须在指定的时限(单位秒)内认证成功
LoginGraceTime 2m
# 允许root用户登录
PermitRootLogin yes
# 指定是否要求sshd(8)在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查
StrictModes yes
# 指定每个连接最大允许的认证次数
MaxAuthTries 6
# 最大允许保持多少个连接。默认值是 10
MaxSessions 16
# 是否开启公钥认证, 仅可以用于SSH-2. 默认值为"yes"
PubkeyAuthentication yes
# 是否允许密码验证
PasswordAuthentication no
# 是否允许空密码
PermitEmptyPasswords no
# 是否允许质疑-应答(challenge-response)认证
ChallengeResponseAuthentication no
# 是否通过PAM验证
UsePAM yes
# 是否允许X11转发
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
# 指定sshd是否在每一次交互式登录时打印 /etc/motd 文件的内容
PrintMotd no
# 指定sshd是否在每一次交互式登录时打印最后一位用户的登录时间
PrintLastLog yes
# 配置超时
TCPKeepAlive yes
ClientAliveInterval 120
ClientAliveCountMax 10
# 配置Pid
PidFile /var/run/sshd.pid
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
TEXT
service sshd restart

创建 config 文件

1
2
cd ~/.ssh
vim conifg

编辑 config 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Host *   
ServerAliveInterval 120

Host target1
HostName $HOST
Port $PORT
IdentityFile ~/.ssh/id_ed25519
User user

Host target2
HostName $HOST
Port $PORT
IdentityFile ~/.ssh/id_ed25519
User user
  • 其中 ServerAliveInterval 是为了保持心跳
  • $HOST 是目标机器的IP
  • $PORT 是目标机器 ssh 端口
  • target 是自己设置的目标机器的别名
    • Host * 下的 ServerAliveInterval 是可以被下面的 Host target继承的

打完收工

输入 ssh target1 即可快速连接远程主机