当前位置: 首页 > Linux

如何建立足够安全的SSH连接?

时间:2023-04-07 01:12:18 Linux

1概述使用SSH连接服务器是很常见的事情,但是连接是否足够安全是一个问题。本文从以下几个方面介绍如何建立一个足够安全的SSH连接:端口协议用户密码密钥对ssh-agent2端口第一步是修改默认端口22,只要修改/etc/ssh/sshd_config中的Port即可,对于例如这里改成1234端口:1234端口在Debian系统中可以直接修改。在RedHat中,还需要使用semanage开启端口:yuminstallpolicycoreutils-python#如果没有安装,需要安装semanageport-a-tssh_port_t-ptcp1234#添加端口semanageport-l|grepssh#验证是否添加成功3SSH协议SSH2协议比SSH1安全,所以推荐使用,同时修改配置文件:Protocol2#如果没有,在最后添加这样一个客户端当client连接上,不能使用Protocol1协议连接:ssh-1username@ip会提示SSHprotocolv.1isnolongersupported4Timeoutdisconnection改为60s没有操作自动断开:ClientAliveInterval60#以秒为单位,单位超过60s无操作自动断开ClientAliveCountMax0#如果客户端没有响应,则判断超时。该参数设置允许超时次数为5。限制用户5.1禁用root用户登录PermitRootLoginno当然,禁用前需要先创建一个登录用户。一个名为aa的用户:useraddaapasswdaavim/etc/sudoers复制一行root权限,修改用户名:然后输入:wq!强制保存退出。5.2指定登录AllowUserstestuser的用户,这样只有这个用户才能连接到服务器。另外,如果出现拒绝登录的问题:kex_exchange_identification:read:Connectionresetbypeer,需要开启对应的allowediplogin,修改/etc/hosts。allow,add:sshd:ALL5.3DisablespecificuserloginDenyUsertestuser禁止通过testuser登录。类似的配置包括AllowGroups和DenyGroups。6Passworddisabled(null)密码登录:PermitEmptyPasswordsnoPasswordAuthenticationno7LogLogLevelVERBOSE默认为INFO,修改为VERBOSE可以得到更详细的信息。8密钥对8.1生成密钥对上面已经设置了不能使用密码登录。换句话说,你需要使用密钥登录。生成密钥并不难:ssh-keygen-trsa只需要指定算法,默认3072位,可选4096位。不过,相对于传统的RSA,OpenSSH6.5中引入了另一种更安全的算法Ed25519,它使用椭圆曲线进行加密。Ed25519相比RSA的优势是:体积更小:相比544个字符的RSA3072,Ed25519只快了68个字符:生成速度比RSA快,签名速度也比RSA快更安全:签名过程是不依赖随机数生成器,不依赖哈希函数的防碰撞特性,无时间通道攻击问题的生成方法很简单:ssh-keygen-a1024-ted25519-f~/.ssh/ed25519参数说明如下:-a:指定KDF(KeyDerivationFunction)的轮数-t:指定算法,可选dsa,ecdsa,ecdsa-sk,ed25519,ed25519-sk,rsa-f:复制生成指定位置后的公钥:ssh-copy-id-i~/.ssh/ed25519.pubuser@ip8.2私钥密码比如按照上面的方法生成密钥对时,你会提示输入私钥密码:这里使用私钥连接时会提示输入密码:8.3配合ssh-add默认每次使用私钥登录都需要输入私钥的密码in.如果不想每次都输出,可以使用ssh-add:ssh-add~/.ssh/test#~/.ssh把/test换成对应的私钥路径这样就只需要输入一次私钥密码,下次连接时无需输入私钥密码即可连接。8.4使用不同的密钥对假设你有多个服务器:server1、server2、server3,你可以为不同的服务器使用不同的密钥对,而不是使用相同的密钥对:ssh-keygen-a1024-ted25519-f~/.ssh/server1ssh-keygen-a1024-ted25519-f~/.ssh/server2ssh-keygen-a1024-ted25519-f~/.ssh/server3然后复制公钥到对应的服务器:ssh-copy-iduser@server1-i~/.ssh/server1.pubssh-copy-iduser@server2-i~/.ssh/server2.pubssh-copy-iduser@server3-i~/.ssh/server3。pub9ssh-agent9.1这是什么?ssh-agent是一个帮助管理私钥的程序。代理可以提供以下用途:自动密钥选择:当使用不同的密钥连接不同的主机时,需要手动指定密钥(例如,在上面使用不同密钥对的例子中,需要添加-i连接不同服务器时的参数),可以自动选择ssh-agent,无需手动指定,自动输入私钥密码:如果私钥设置了密钥(如上面的私钥密码例子),但是需要经常使用私钥进行认证,ssh-agent可以帮助自动输入私钥的密码9.2使用首先开始:eval`ssh-agent`#注意是反引号然后加上私钥:#以上面“使用不同的密钥对”为例ssh-add~/.ssh/server1ssh-add~/.ssh/server1ssh-add~/.ssh/server1不需要手动指定-i以这种方式连接时的参数。如果私钥指定了密码,那么在ssh-add:时会提示输入,这样下次使用私钥和密钥连接时就不需要再输入密码了。102FATwo-FactorAuthentication,简称2FA,意思是双因素认证,双因素认证等,顾名思义就是两步认证的操作,可选的应用有:GoogleAuthenticatorAuthyYubicoDuo比如GoogleAuthenticator,安装后需要连接服务器进行输入验证码操作。我不会具体演示,因为我需要经常连接,所以这个选项对我来说并不实用。如果你想实现它,你可以参考这里的细节。11其他选项11.1设置最大输错次数MaxAuthTries6默认最多允许输错3次密码(需除以2),如果改为2,表示输错一次密码,将自动断开连接。11.2主动断开会话LoginGraceTime120如果在LoginGraceTime指定的时间内没有连接成功,则自动断开会话。默认单位是秒,可以指定分钟。例如:LoginGraceTime2m12最后修改配置文件/etc/ssh/ssd_config后,重启sshd服务:systemctlrestartsshd13了解ssh代理参考:ssh-agent简书-SSH超时断开(ClientAliveInterval和ClientAliveCountMax)使用两步验证(2FA)以保护您的SSH连接10个步骤来保护OpenSSHS在Ubuntu上保护SSH服务器将您的SSH密钥升级到Ed25519