Ubuntu 18.04 配置SSH访问: 禁止密码访问及免密码Key文件登陆

摘要:本文讲述如何对Ubuntu 18.04 和Windows 10 进行相应配置来提高SSH访问安全性。

任务: 目前使用Ubuntu 18.04 server,经常需要从其他机器进行SSH访问,比如在Windows 10上使用PuTTY访问。为提高系统安全性,决定对SSH访问方式进行如下修改:禁止使用密码方式,必须通过key文件方式免密码登陆。

操作步骤:

  1. 目标Ubuntu server上生成密钥对(公钥和私钥)用来进行免密码登陆
  2. 配置公钥和私钥
  3. 修改Ubuntu server的ssh config文件来禁止密码登陆以及允许用key文件免密码登陆

1. Ubuntu Server上生成密钥(公钥和私钥)

  • 在Ubuntu上运行ssh-keygen,使用默认的文件名和路径即可,默认名字为 ~/.ssh/id_rsa
  • 接下来的passphase可以为空,然后运行,最终在设置的路径下会生成两个文件:
    id_rsa是私钥,需要传输到其他客户端机器,比如Windows做后续处理。
    id_ras.pub是公钥,里面含有公钥字符串。

2. 配置公钥和私钥

  • Windows上生成PuTTY可用的私钥文件。
    Ubuntu生成的id_rsa文件并不能被PuTTY直接使用,还需要运行 PuTTY Key Generator 程序来生成一个新的.ppk类型文件。Windows上运行PuTTyGen程序,从文件菜单里加载Private key,选择从Ubuntu复制过来的id_rsa文件,加载完毕后点击按钮Save Private Key就得到一个.ppk文件。
  • Ubuntu上配置公钥。
    id_ras.pub里面含有公钥字符串。SSH默认从.ssh/authorized_keys 这个文件读取公钥字符串,因此执行命令:
    cat ~/.ssh/id_rsa.pub >> .ssh/authorized_keys
    如果此authorized_keys文件不存在,则会先创建它;如果此文件已经存在,则把id_rsa.pub文件里的内容添加到末尾。

3. 修改ssh config文件

禁止密码登陆和允许免密码登陆都是通过修改/etc/ssh/sshd_config 文件实现,只需要设置如下的两个选项为yes 和no即可:
PubkeyAuthentication yes
PasswordAuthentication no

修改完毕后重启ssh 服务
sudo service ssh restart

断开SSH连接而让server可以持续运行一个进程

附:最近发现了一个可以断开SSH连接而让server可以持续运行一个进程(长时间下载文件 🙂 )的方法。一般情况下,如果从SSH登陆到server并启动一个程序,如果此SSH连接被断开,则该程序也会被停止。而采用如下方法就不会:
nohup long_time_process &

上面的命令执行后就可以断开SSH连接让Server继续干活了,想要kill它,可以从top命令里找到该进程并kill。