Secure Shell(安全外壳协议,简称 SSH )是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH 通过在网络中创建安全隧道来实现 SSH 客户端与服务器之间的连接。SSH 最常见的用途是远程登录系统,人们通常利用 SSH 来传输命令行界面和远程执行命令。

——Secure Shell - 维基百科,自由的百科全书

本地电脑直接操作就可以了,为什么我还要用 SSH 连接呢?因为这样很酷我懒得从椅子上起来走到另一台电脑操作。本文把被连接的电脑称为服务端,另一台为客户端。开始操作前请确保两台电脑处于同一个网络。

安装 OpenSSH

  1. 在两台电脑安装 OpenSSH

    1
    
    sudo pacman -Syu openssh
    
  2. 在服务端启用 SSH 服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # 启用 sshd.service
    sudo systemctl start sshd.service
    # 开机启动
    sudo systemctl enable sshd.service
    
    # 关闭开机启动
    # sudo systemctl disable sshd.service
    # 关闭 sshd.service
    # sudo systemctl stop sshd.service
    
  3. 查看状态

    1
    2
    3
    4
    
    ❯ systemctl status sshd.service
    ● sshd.service - OpenSSH Daemon
         Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: disabled)
         Active: active (running)
    

    显示 Active: active 就说明成功了

  4. 查看服务端本地 IP 地址

    1
    2
    
    ip route get 1.2.3.4 | awk '{print $7}'
    # 192.168.3.100
    

    ip addr 查看也行

  5. 客户端连接服务端

使用 SSH 密钥登陆

用 SSH 密钥登陆就可以不输入密码登陆了。

  1. 在客户端生成 SSH 密钥

    1
    2
    
    ssh-keygen -t ed25519 -C "your computer model"
    # 一直按 Enter 就行
    
  2. 查看并复制 SSH 公钥

    1
    2
    
    ❯ cat  ~/.ssh/id_ed25519.pub
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHY84a2KfbwfkkKyoSvQk+thsKITpmdFzNbYoCs0SlkU magicbook14
    
  3. 连接服务端

  4. 导入 SSH 公钥

    1
    2
    3
    
    mkdir ~/.ssh
    touch ~/.ssh/authorized_keys
    echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHY84a2KfbwfkkKyoSvQk+thsKITpmdFzNbYoCs0SlkU magicbook14' >> ~/.ssh/authorized_keys
    

禁止密码登陆

禁用密码登陆后别人就不能暴力破解密码了,更加安全。接下来使用服务端操作,用客户端 SSH 连接操作也行。

1
2
# 备份配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
1
2
# 修改配置
sudo nano /etc/ssh/sshd_config

在里面加入:

1
PasswordAuthentication no
1
2
3
4
# 重启 sshd.service
sudo systemctl restart sshd.service
# 终止原有连接
pkill sshd

用 UFW 防火墙限制 IP

使用服务端操作,配置并启用 UFW 后只允许特定 IP 访问,例如 192.168.3.177。

1
2
3
4
5
6
# 禁止入站连接(外部访问)
sudo ufw default deny incoming
# 允许 192.168.3.177 访问
sudo ufw allow from 192.168.3.177
# 终止原有连接
pkill sshd

查看 SSH 连接

1
ss | grep ssh

禁用 SSH 服务

1
sudo systemctl stop sshd.service

禁用服务不会终止已有 SSH 连接,要执行以下命令终止所有连接。

1
pkill sshd

终止 SSH 连接

终止 1 个 SSH 连接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 查看用户,pts/1 就是 SSH 连接
❯ w
 18:20:06 up  1:08,  2 users,  load average: 0.92, 0.54, 0.43
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
hunter   tty1      17:12    1:08m 53.14s  0.06s /usr/bin/startplasma-x11
hunter   pts/1     18:18   14.00s  0.47s  0.47s -zsh

# 终止进程
❯ pkill -9 -t pts/1

# 查看用户,现在没有 SSH 连接了
❯ w
 18:22:23 up  1:10,  1 user,  load average: 0.44, 0.48, 0.42
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
hunter   tty1      17:12    1:10m 58.05s  0.06s /usr/bin/startplasma-x11

终止所有连接

1
pkill sshd

参考资料

延伸阅读