使用SSH
链接服务器是一件很日常的事,可是,链接是否足够安全是一个使人担心的问题。本文从以下几个方面介绍了如何创建一个足够安全的SSH
链接:python
ssh-agent
第一步就是修改默认端口22
,修改/etc/ssh/sshd_config
中的Port
便可,好比这里修改成1234
端口:算法
Port 1234
注意这里须要配合SELinu
添加端口,不然不能启动sshd
服务,在CentOS8
中能够经过semanage
添加端口,首先查看是否安装policycoreutils-python-utils
:ubuntu
rpm -qa | grep policycoreutils-python-utils
若是没有安装就使用yum
安装:安全
sudo yum install policycoreutils-python-utils
接着添加ssh
端口:bash
sudo semanage port -m -t ssh_port_t -p tcp 1234
查看是否添加成功:服务器
sudo semanage port -l | grep ssh
SSH
协议SSH2
协议要比SSH1
安全,所以建议使用,一样修改配置文件:ssh
Protocol 2 # 若是没有就末尾添加
注意服务器添加Protocol 2
后,客户端也须要在/etc/ssh/sshd_config
中添加Protocol 2
。tcp
修改成60s
未操做自动断开:函数
ClientAliveInterval 60 # 以秒为单位,超过60s未操做自动断开 ClientAliveCountMax 0 # 若是客户端没有响应则判断一次超时,该参数设置容许超时的次数
Root
用户登陆PermitRootLogin no
AllowUsers testuser
这样只能经过ssh testuser@ip
链接到该服务器。加密
另外还能够为用户添加指定ip
,好比笔者的本机内网ip
为192.168.1.7
,修改成:
AllowUser testuser@192.168.1.7
这样其余ip
就不能登陆了。
DenyUser testuser
禁止经过testuser
登陆。
相似的配置还有AllowGroups
与DenyGroups
。
PermitEmptyPasswords no PasswordAuthentication no
MaxAuthTries 6
默认为最多容许3
次密码错误(须要除2),修改成2
则表示若是密码输入错误一次即自动断开。
LogLevel VERBOSE
默认为INFO
,修改成VERBOSE
能够获得更加详细的信息。
上面已经设置了不能使用密码登陆,那么,换句话说须要使用密钥登陆,生成密钥并不难:
ssh-keygen -t rsa
只须要指定算法便可,默认为3072
位,可选4096
位。
可是,相比起传统的RSA
,在OpenSSH 6.5
中引入了另外一种叫Ed25519
的更加安全的算法,使用椭圆曲线进行加密。Ed25519
相比起RSA
的优势有:
RSA 3072
的544
个字符,Ed25519
只有68
个字符RSA
快,同时签名速度也比RSA
快生成方式很简单:
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/ed25519
参数说明以下:
-a
:指定KDF
(Key Derivation Function
)的轮数-t
:指定算法,可选dsa
、ecdsa
、ecdsa-sk
、ed25519
、ed25519-sk
、rsa
-f
:指定位置生成以后复制公钥便可:
ssh-copy-id user@ip -i ~/.ssh/ed25519.pub
好比按上述方式生成密钥对时,会提示输入私钥密码:
这里的密码会在使用私钥链接的时候提示:
假设您有多台服务器:server1
,server2
,server3
,则能够为不一样服务器使用不一样的密钥对,而不是使用同一个密钥对:
ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server1 ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server2 ssh-keygen -a 100 -t ed25519 -f ~/.ssh/server3
接着复制公钥到对应的服务器上:
ssh-copy-id user@server1 -i ~/.ssh/server1.pub ssh-copy-id user@server2 -i ~/.ssh/server2.pub ssh-copy-id user@server3 -i ~/.ssh/server3.pub
ssh-agent
ssh-agent
是一个程序,能够帮助管理私钥。代理能提供以下用途:
使用不一样密钥对
的例子中,链接到不一样服务器时须要加上-i
参数),ssh-agent
能够自动选择,不须要手动指定私钥密码
例子),可是又须要频繁地使用私钥进行认证时,ssh-agent
能够帮助自动输入私钥的密码首先启动:
eval `ssh-agent` # 注意是反引号
接着添加私钥:
# 以上面“使用不一样的密钥对”为例 ssh-add ~/.ssh/server1 ssh-add ~/.ssh/server1 ssh-add ~/.ssh/server1
这样链接的时候就不须要手动指定-i
参数了。
若是私钥指定了密码,会在ssh-add
时进行提示输入:
这样下次使用带密钥的私钥链接时就不须要输入密码了。
2FA
Two-Factor Authentication
,缩写2FA
,意为双重认证
,双因子认证
等等,顾名思义就是进行两步认证的操做,可选的应用有:
Google Authenticator
Authy
Yubico
Duo
好比Google Authenticator
,安装以后,链接服务器须要进行输入验证码的操做。
具体的话就不演示了,由于笔者须要常常链接,所以这个选项对笔者来讲不太实际,想要实现的话具体能够参考这里。