SSH作为Linux服务器的缺省登陆方式,安全性上需要进一步的增强,就我个人经验来讲,主要有以下方法:
1.禁止root用户登陆:
修改/etc/ssh/sshd_config
PermitRootLogin yes
2.仅允许某一用户(如Jack)登陆
修改/etc/ssh/sshd_config
UserAllow Jack
3.修改SSH监听端口(如7890)
修改/etc/ssh/sshd_config
Port 7890
4.通过hosts.allow仅允许指定IP(如8.8.8.8)或IP段(如8.8.8.x)通过
修改/etc/hosts.deny
sshd:all
修改/etc/hosts.allow
sshd:8.8.8.8
sshd:8.8.8.
5.禁用密码方式验证,使用密钥证书方式登陆
具体实现过程将稍后在本文中进行讲解
6.在服务器上安装OpenVPN Server,然后仅允许OpenVPN的本地IP段通过
这样每次都需要通过证书登陆到OpenVPN,才能再登陆到SSH,具体OpenVPN的搭建请参考我的这篇文章:http://heylinux.com/archives/555.html
从1到6,安全级别逐渐加强,但安全与便捷始终存在着矛盾,这一点需要大家自己进行取舍。
下面,我将对利用SSH Key实现安全的密钥证书方式登陆进行介绍,介绍中包括的客户端为 SSH Secure Shell,PuTTY,SecureCRT以及Linux终端。
一、配置OpenSSH服务端
1.修改配置文件中的以下记录
# vim /etc/ssh/sshd_config
================================
PermitEmptyPasswords no
PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
StrictModes no
================================
2.为用户(如jack)创建authorized_keys文件
# cd /home/jack
# mkdir .ssh
# touch .ssh/authorized_keys
# chmod 700 .ssh
# chmod 600 .ssh/authorized_keys
# chown -R jack:jack .ssh(SUSE上需要执行 chown -R jack:users .ssh)
3.重启OpenSSH服务
# /etc/init.d/sshd restart
二、配置SSH客户端
使用SSH Secure Shell客户端生成SSH Key
打开SecureCRT客户端,点击 “ Edit- Settings ”;
选择 “ Global Settings - User Authentication – Keys ”,点击 “ Generate New ”;
再出现的界面中选择 “ RSA ” 与 “ 1024 ”,点击 “ 下一步 ”;
会出现一个密码生成的界面,完成之后,点击下一步;
在界面中输入 文件名,提示信息与密码短语,点击下一步;
可以看到刚刚生成的key;
进入密钥存放路径中,用记事本打开Jack.pub公钥文件;
将文件中的密钥信息复制到新的文件中,重新编辑为可被OpenSSH接受的格式;
例如原有格式:
---- BEGIN SSH2 PUBLIC KEY ----Comment: "Jack [1024-bit rsa, Digby ]"
AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCN
qnCPOXnHqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe
9/8xDIwxww9OFvRPk9KP7W1653ahj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q==
---- END SSH2 PUBLIC KEY ----
可被OpenSSH接受的格式,即“ssh-rsa 密钥 提示信息”,需要去除换行,将整个处理为单行记录:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCNqnCPOXn
HqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe9/8xDIwxww9OFvRPk9KP7W1653a
hj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q== Jack
将编辑后的内容复制下来,并粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。
此时SSH Secure Shell默认已经使用Identity文件作为本地私钥了;
使用SSH Secure Shell工具进行登陆,当出现以下提示框,说明密钥已经验证通过,输入设置的密码短语,即可登陆。
使用Linux终端生成SSH Key
使用ssh-keygen生成SSH Key,依次输入:回车,密码短语,密码短语。
然后进入密钥存放路径中,打开 id_rsa.pub 公钥文件;
将文件中的内容复制下来,粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。
使用命令行进行登陆,当出现以下提示框,说明密钥已经验证通过,输入设置的密码短语,即可登陆。
使用PuTTY客户端生成SSH Key
打开PUTTYGEN.exe程序,点击Generator,在出现的界面中滑动鼠标来输入随机数据,进入到如下界面。
执行以下操作:
在Key comment:输入key的提示信息;
在Key passphrase:输入key的密码短语,在Confirm passphrase:再次输入key的密码短语;
在Type of key to generate:选择SSH-2 RSA;
在Number of bits in a generated key:输入1024;
点击Save public key保存 公钥 到本地,命名为ssh-rsa.pub;
点击Save private key保存 私钥 到本地,命名为ssh-rsa.ppk。
将最上方的Public key for pasting into OpenSSH authorized_keys file:的文本框中的内容复制下来,并粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。
使用PuTTY,在Connection-SSH-Auth中的Private key file for authentication中选择刚生成的ssh-rsa.ppk文件。
使用PuTTY进行登陆,当出现以下提示框,则说明密钥已经验证通过,输入开始设置的密码短语,即可登陆。
使用SecureCRT客户端生成SSH Key
打开SecureCRT客户端,点击 “ Tools - Create Public key ”;
在陆续出现的界面中,执行以下操作:
选择 下一步,然后选择密钥类型为“ RSA ”;
选择 “ OpenSSH Key format ” 并确认密钥存放路径,点击 完成;
进入密钥存放路径中,用记事本打开Identity.pub公钥文件;
将文件中的内容复制下来,粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。
如果使用的SecureCRT客户端版本比较低,不能够选择“OpenSSH Key format”格式来存储密钥,那么就需要将文件中的密钥信息复制到新的文件中,重新编辑为可被OpenSSH接受的格式;
例如原有格式:
---- BEGIN SSH2 PUBLIC KEY ----
Subject: Digby
Comment: "Jack"
ModBitSize: 1024
AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCN
qnCPOXnHqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe
9/8xDIwxww9OFvRPk9KP7W1653ahj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q==
---- END SSH2 PUBLIC KEY ----
可被OpenSSH接受的格式,即“ssh-rsa 密钥 提示信息”,需要去除换行,将整个处理为单行记录:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCNqnCPOXn
HqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe9/8xDIwxww9OFvRPk9KP7W1653a
hj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q== Jack
将编辑后的内容复制下来,粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。
此时SecureCRT默认已经使用Identity文件作为本地私钥了,如果需要指定私钥文件,需要在 “Connection - SSH2 - Authentication(PublicKey) - Properties ”中进行设置;
使用SecureCRT工具进行登陆,当出现以下提示框,则说明密钥已经验证通过,输入开始设置的密码短语,即可登陆。
三、注意事项
在生成了key之后,一定要保存好生成的两个证书文件,它们分别代表了 公钥 和 私钥;
其中公钥用于添加到服务器端用来识别私钥,私钥用于服务器认证,如果不单独复制出来好好的保存的话,极有可能在重装系统或SSH客户端之后,造成两个证书文件的丢失,也就再也无法登陆服务器了。
另外,为证书创建一个密码短语也是非常有必要的,因为如果一旦证书泄露了,且没有密码短语的保护,那么拿到证书的人就可以直接登陆到服务器中。
---------------------- 可以用 ---------------------------------------
以下是简单的操作步骤:
1)先添加一个维护账号:msa
2)然后su - msa
3)ssh-keygen -t rsa
指定密钥路径和输入口令之后,即在/home/msa/.ssh/中生成公钥和私钥:id_rsa id_rsa.pub
4)cat id_rsa.pub >> authorized_keys
至于为什么要生成这个文件,因为sshd_config里面写的就是这个。
然后chmod 400 authorized_keys,稍微保护一下。
5)用psftp把把id_rsa拉回本地,然后把服务器上的id_rsa和id_rsa.pub干掉
6)配置/etc/ssh/sshd_config
Protocol 2
ServerKeyBits 1024
PermitRootLogin no #禁止root登录而已,与本文无关,加上安全些
#以下三行没什么要改的,把默认的#注释去掉就行了
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
7)重启sshd
/sbin/service sshd restart
8)转换证书格式,迁就一下putty
运行puttygen,转换id_rsa为putty的ppk证书文件
9)配置putty登录
在connection--SSH--Auth中,点击Browse,选择刚刚转换好的证书。
然后在connection-Data填写一下auto login username,例如我的是msa
在session中填写服务器的IP地址,高兴的话可以save一下
10)解决一点小麻烦
做到这一步的时候,很可能会空欢喜一场,此时就兴冲冲的登录,没准登不进去:
No supported authentication methods available
这时可以修改一下sshd_config,把
PasswordAuthentication no临时改为:
PasswordAuthentication yes 并重启sshd
这样可以登录成功,退出登录后,再重新把PasswordAuthentication的值改为no,重启sshd。
以后登录就会正常的询问你密钥文件的密码了,答对了就能高高兴兴的登进去。
至于psftp命令,加上个-i参数,指定证书文件路径就行了。
---------------------------------------------------------------------------------------------------