摘要:本文讲述如何对Ubuntu 18.04 和Windows 10 进行相应配置来提高SSH访问安全性。
任务: 目前使用Ubuntu 18.04 server,经常需要从其他机器进行SSH访问,比如在Windows 10上使用PuTTY访问。为提高系统安全性,决定对SSH访问方式进行如下修改:禁止使用密码方式,必须通过key文件方式免密码登陆。
操作步骤:
- 目标Ubuntu server上生成密钥对(公钥和私钥)用来进行免密码登陆
- 配置公钥和私钥
- 修改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。