当前位置: 首页 > 科技观察

SSH命令行帮你实现六大“贴心”安全应用

时间:2023-03-14 21:22:03 科技观察

【.com速译】SecureShell是一种用于安全连接的网络协议。广泛用于各种服务器的连接、修改、上传和最终退出。这些操作有时可以通过工具来实现,有时甚至可以直接使用终端。在这里,您将学习一些在标准SSH之外使用终端的技巧。在深入研究高级SSH技术之前,我们假设您已经具备一些关于SSH密钥安全和使用的基本知识。在本文中,我们将使用user指代SSH用户,使用yourserver.tld指代域名或IP地址,因此您需要自行替换正确的用户名和主机名信息。为了修改SSH服务器的配置,需要直接以root身份登录,或者使用sudo提升普通用户权限。为了使/etc/ssh/sshd_config中的更改在系统范围内生效,您需要重新加载SSH服务。根据您使用的操作系统,具体操作会有所不同。例如,在基于Debian的系统上,您需要在提权后以root或sudo身份在终端中输入servicesshreload。每次更改服务器端SSH配置时,都必须重新加载(或重新启动)相应的服务。配置顺序与其他Linux系统工具相同,配置选项生效的顺序如下:直接在终端/应用程序中给出命令行选项。用户的配置文件(~/.ssh/config)。客户端的系统范围配置文件(/etc/ssh/ssh_config)。这意味着通过命令行输入的任何SSH参数都优先于配置文件中的参数。因此,对于一次性操作,最好的方式就是直接使用命令输入;对于您要经常连接的特定主机,或者要使用不同的用户名,最好将其保存在配置文件中。SSH守护进程本身使用的系统范围的配置文件存储在etc/ssh/sshd_config中。ServerAliveCountMax指令指定了从发送数据包到因服务器无响应而取消连接的重复尝试次数(一般为整数)。ClientAliveInterval是SSH守护进程的服务配置文件/etc/ssh/sshd_config中使用的指令。它指定服务器在向客户端发送数据包之前应等待的秒数。您可以将该值设置为0,这会禁用该选项。ClientAliveCountMax指令指定了从发送数据包到因为没有客户端响应而取消连接的重复尝试次数(一般为整数)。所有主机使用同一个客户端SSH配置文件设置keepalive参数:~/.ssh/config中的Host*ServerAliveInterval30ServerAliveCountMax10表示客户端会等待30秒后发送空包,最多尝试10次以确认断开连接服务器无响应的情况。3.SSH代理我觉得每次输入密码很繁琐,也许我应该生成一些密钥而不是密码?一种常见且有效的安全做法是加密您的SSH私钥并使用密码短语对其进行解密。这种方法的缺点是每次启动SSH连接时都必须繁琐地重新输入密码,这实际上是重新输入密码。要解决这个问题,您可以使用ssh-agent。它是一种在会话期间将私钥保存在内存中的工具。当代理启动时,所有需要SSH连接的窗口和应用程序都会通过代理获取您的私钥,因此您只需在会话开始时输入一次密码即可。在大多数Linux操作系统上,SSH-agent默认运行,因此不需要额外安装。如果要检查ssh代理是否正在运行,可以在终端中键入:psx|grepssh-agent如果它没有运行,你可以像这样启动它:eval$(ssh-agent)一旦它运行了,你可以log列出当前可用于ssh-agent的所有密钥:ssh-add–L如果密钥你wanttouse丢失了,你可以用ssh-add/path/to/your/ssh/privatekey添加。当您尝试连接到主机并出现Toomanyauthenticationfailuresforuser错误时,这意味着SSH代理正在尝试检查所有可用密钥。所以最好的方法是在你的配置文件中定义一个IdentityFile/path/to/your/ssh/privatekey/forthishost。如果要确保只能使用IdentityFile定义的连接,可以在配置中使用指令IdentitiesOnlyyes,它会告诉SSH只使用终端或配置文件提供的密钥。请看下面的例子:在~/.ssh/config,HostyourserverHostNameyourserver.tldIdentityFile~/.ssh/yourprivatekeynameIdentitiesOnlyyesUseruser(1)代理转发我只想一开始就输入一次密码,然后即使我从主机启动并且在连接到其他主机时不要提示我再次输入。还可以转发代理,以便在互连的主机之间共享相同的信任凭证。虽然这种转发非常方便,但请记住:代理只将您的私钥保存在内存中。一旦恶意程序破坏了网络上的主机,它就可以使用您的密钥在其他主机上执行各种命令。可见代理转发是一种不安全的方式,只能在你连接的可信主机上使用。为了使用代理转发,需要在客户端的ssh_config中设置ForwardAgentyes,在任何需要使用转发代理的服务器上的/etc/ssh/sshd_config中设置AllowAgentForwardingyes。4.通过本地端口转发建立隧道我想做的是,本地计算机不允许,但我知道某处的计算机允许。隧道是SSH最常见的高级用例之一。它通过加密SSH连接内的应用程序流量来提供安全保护。这对于遗留软件或其他安全性较差的应用程序和系统非常有用,因为它为不能也不能更改的软件设置了安全包装,以防止不安全的网络环境。(1)服务器端服务器端可以修改文件/etc/ssh/sshd_config中的配置。由于#开头的行被注释掉了,如果要使用这个选项,只需要再复制一行修改或者直接取消注释即可。对于端口转发隧道,您需要启用TCP转发才能使其正常工作。在/etc/ssh/sshd_config中,AllowTcpForwardingyes如果修改了服务器的配置文件,记得重新加载SSH服务。至于如何重新加载或重新启动您的服务器服务,则取决于操作系统的类型。在大多数情况下,它应该是以下命令:servicesshreload(2)client有几种方法可以在客户端使用SSH隧道。大多数时候,您将像这样实现SSH隧道:如果您想要查询只能从另一台机器访问的数据库,则需要通过隧道连接到该机器。以下示例显示如何使用yourserver.tld隧道连接到PostgreSQL数据库服务器,并在那里使用基于终端的psql前端。ssh-L5000:psql.server.ip:5432user@yourserver.tldpsql-p5000-h127.0.0.1-Upostgres有些网站被你的网络屏蔽了,所以用隧道进入一个允许各种连接的服务器,可以浏览这些了网站的主机。以下命令使您能够使用这台机器隧道连接到另一台不受限制的主机。在本地计算机上,您可以在浏览器中输入并打开http://localhost:1337,它将使用默认的HTTP端口80打开yourwebsite.com。ssh-L1337:yourwebsite.com:805。X11转发我没有一些昂贵的软件的许可证,我只能在连接到服务器后在我的主屏幕上显示它。你可以通过SSH发起X11转发,也就是说你可以显示远程电脑的桌面环境,将各种X11包转发到你正在使用的电脑上。X11转发的适用性很广,尤其是必须要用到某个软件的GUI时。在下面的示例中,我们将使用X11测试转发xclock。(1)先决条件为了向客户端转发X11数据包,必须在服务器上预先安装xauth包。所以如果要测试xclock,必须提前安装好。(2)在服务器上,需要在/etc/ssh/sshd_config中启用X11Forwarding。具体操作是:找到有X11Forwarding的一行,设置为yes,也就是说:如果这一行已经存在并且已经被注释掉了,可以直接删除前面的#。在/etc/ssh/sshd_config中,X11Forwardingyes修改配置文件后,请不要忘记重新加载SSH服务。(3)Clientssh-X现在,您可以使用X11将服务器转发到客户端计算机。通过键入xclock,一个时钟窗口将在您的桌面计算机上弹出,如屏幕截图所示。X11转发的妙处在于,当你因为授权原因想使用一个只能安装在一台服务器上的软件,或者你对普通电脑有不同的性能要求时,你可以使用X11转发。.6、代理跳转(ProxyJump)我想访问一个与外界隔绝的私有网络,我会搭建一个可以连接的服务器,然后跳转到我想去的机器上。SSH的一种常见访问策略是连接到堡垒主机,然后从那里跳转到没有公共路由的设备。堡垒主机称为代理链上的第一跳主机。ProxyJump是OpenSSH的一个新特性,它简化了跳转主机的使用。当您不想公开时,它会为主机增加额外的安全层。一个用例是:使用一台小型机器作为路由器后面的堡垒物理机器,在其上运行sshd,然后从那里跳转到其他主机。可见这对于家庭网络来说是非常实用的。这与从一个主机到下一个主机的端口转发和隧道没有什么不同,除了在这种情况下,关键字ProxyJump描述指定主机之间的跳转,指的是逗号分隔列表。在终端请使用参数-J,如下:ssh-Jproxy.server.tld:22yourserver.tld对于需要使用不同用户名的多台主机之间更复杂的跳转,可以使用:ssh-J[emailprotected]:port1,[emailprotected]:port2由于您可能会经常使用主机到主机跳转,因此最好将它们包含在您的用户或系统常规SSH配置中。以下配置文件适用于上述用例:在~/.ssh/config中,Hostyourserver.tldHostNameyourserver.tldProxyJumpuser1@proxy.server1.tld:port1,user2@proxy.server2.tld:port2Useruser的跳转指定了SSH配置,并使用ProxyJump字段指定它们的别名。在~/.ssh/config中,HostfirstproxyHostNameproxy.server1.tldPort1234Useruser1HostsecondproxyHostNameproxy.server2.tldPort5678Useruser2Hostyourserver.tldHostNameyourserver.tldProxyJumpfirstproxy,secondproxyUseruser请注意,新添加的ProxyJump和那些旧的ProxyCommand指令完全符合“先到先得”的原则,它表示第一个设置的将首先执行,依此类推。如果你的SSH客户端不支持ProxyJump,你可以使用ProxyJump的命令代替:ProxyCommandsshfirstproxy-W%h:%p。原标题:AdvancedSecureShell:6ThingsYouCanDoWithSSH,作者:SanjaBonic