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

SSHLinux远程连接新手指南

时间:2023-03-12 09:18:10 科技观察

学习使用安全外壳协议连接到远程计算机。使用Linux,只需要在键盘上输入命令,就可以巧妙地使用电脑(甚至这台电脑可以在世界任何地方),这是Linux最吸引人的特点之一。借助OpenSSH,POSIX用户可以在一台有连接权限的计算机上打开安全外壳协议,然后远程使用。对于许多Linux用户来说,这可能只是一项日常任务,但对于那些从未做过的人来说,这可能会让人感到困惑。本文介绍如何在两台计算机之间配置安全外壳(SSH)连接,以及如何在没有密码的情况下从一台计算机安全地连接到另一台计算机。相关术语在讨论多台计算机时,区分不同的计算机可能是一件令人头疼的事情。IT社区有完善的术语来描述联网计算机的过程。服务:服务是在后台运行的软件,因此它不限于安装它的计算机。例如,Web服务器通常托管Web共享服务。该术语暗示(但不是绝对地)它是没有图形界面的软件。Host主机:主机可以是任何一台电脑。在IT中,任何计算机都可以称为主机,因为从技术上讲,任何计算机都可以托管对其他计算机有用的应用程序。您可能不会将笔记本电脑视为主机,但它上面可能运行着一些对您、您的手机或其他计算机有用的服务。local本地:本地计算机是指用户或某些特定软件正在使用的计算机。例如,每台计算机都将自己称为本地主机。Remoteremote:远程计算机是指一台既不在你面前,又不在实际使用中的计算机,是真正意义上的远程计算机。现在术语已经清楚了,我们可以开始了。在每台主机上激活SSH要通过SSH连接两台计算机,每台主机都必须安装SSH。SSH有两个组成部分:在本地计算机上用于发起连接的命令,以及用于接收连接请求的服务器。有些计算机可能已经安装了SSH的一个或两个部分。验证SSH是否完全安装的命令因系统而异,所以最简单的验证方法是查阅相关配置文件:$file/etc/ssh/ssh_config/etc/ssh/ssh_config:ASCIItextIfNosuchfileordirectoryerror返回,表示没有安装SSH命令。SSH服务的检测类似这样(注意文件名中的d):$file/etc/ssh/sshd_config/etc/ssh/sshd_config:ASCIItext根据不存在选择安装两个组件:$sudodnfinstallopenssh-clientsopenssh-server在远程计算机上,使用systemd命令启用SSH服务:$sudosystemctlenable--nowsshd您还可以在GNOME的系统设置或macOS的系统偏好设置中启用SSH服务。在GNOME桌面上,此设置位于“共享”面板中:在GNOME系统设置中激活SSH启用安全Shell协议现在您已经在远程计算机上安装并启用了SSH,请尝试使用密码登录作为测试。要访问远程计算机,您需要一个用户帐户和密码。远程用户不必与本地用户相同。只要拥有相应用户的密码,就可以在远程机器上以任何用户身份登录。例如,我的用户在我的工作计算机上是sethkenlon,但在我的个人计算机上是seth。如果我正在使用我的个人计算机(即作为我当前的本地计算机)并想通过SSH连接到我的工作计算机,我可以通过将自己标识为sethkenlon并使用我的工作密码来实现。要通过SSH连接到远程计算机,您必须知道其IP地址或可解析的主机名。在远程计算机上使用ip命令查看本机IP地址:$ipaddrshow|grep"inet"inet127.0.0.1/8scopehostloinet10.1.1.5/27brd10.1.1.31[...]如果远程计算机没有ip命令,请尝试ifconfig命令(甚至是Windows上常见的ipconfig命令).127.0.0.1是一个特殊的地址,它实际上是localhost的地址。这是系统用于查找自身的环回地址。这在登录远程计算机时没有用,因此在此示例中,远程计算机的正确IP地址是10.1.1.5。在现实生活中,我的本地网络使用的是10.1.1.0子网,它为我提供了如上所述的正确IP地址。如果远程计算机在不同的网络上,IP地址几乎可以是任何地址(但绝不能是127.0.0.1),并且可能需要一些特殊的路由才能通过各种防火墙到达远程计算机。如果您的远程计算机在同一网络上,但想访问比您自己网络更远的计算机,请阅读我之前关于在防火墙中打开端口的文章。如果您可以通过IP地址或主机名ping远程机器,并且有一个登录帐户,那么您可以通过SSH访问远程机器:$ping-c110.1.1.5PING10.1.1.5(10.1.1.5)56(84)字节来自10.1.1.5的data.64字节:icmp_seq=1ttl=64time=4.66ms$ping-c1akiton.localPING10.1.1.5(10.1.1.5)56(84)字节数据。这是成功的一小步。再次尝试使用SSH登录:$whoamiseth$sshsethkenlon@10.1.1.5bash$whoamisethkenlon测试登录是否有效,下一节将介绍如何激活无密码登录。创建SSH密钥要在没有密码的情况下安全地登录到另一台计算机,登录者必须拥有SSH密钥。您的机器上可能已经有一个SSH密钥,但创建一个新密钥也没什么坏处。SSH密钥的生命周期从本地计算机开始,它由两部分组成:永远不会与任何人或任何事物共享的私钥,以及可以复制到您想要的任何远程以进行无密码访问的远程密钥在机器上。有人可能会创建一个SSH密钥并将其用于从远程登录到GitLab身份验证的所有操作,但我会选择对不同的任务组使用不同的密钥。例如,我在家里使用一个密钥来验证我的本地机器,另一个密钥来验证我维护的Web服务器,一个单独的密钥用于我的Git主机,另一个用于我托管的Git存储库,等等。在这个例子中,我将创建一个唯一的密钥,供LAN上的计算机使用。使用ssh-keygen命令创建一个新的SSH密钥:$ssh-keygen-ted25519-f~/.ssh/lan其中-t选项代表类型,上面的代码设置了一个高于默认的密钥加密级别。-f选项代表文件,指定密钥的文件名和位置。运行此命令将生成一个名为lan的SSH私钥和一个名为lan.pub的SSH公钥。使用ssh-copy-id命令将公钥发送到远程机器,然后确保您可以通过SSH访问远程机器。如果不能使用密码登录远程主机,则不能设置无密码登录:$ssh-copy-id-i~/.ssh/lan.pubsethkenlon@10.1.1.5过程中,系统将提示您输入远程主机上的登录密码。运行成功后,使用-i选项将SSH命令指向对应的key(本例为lan),再次尝试登录:$ssh-i~/.ssh/lansethkenlon@10.1.1.5bash$whoamisethkenlonontheLAN对所有计算机重复此过程,您将无需密码即可访问此LAN上的每台主机。事实上,一旦设置了无密码身份验证,就可以编辑/etc/ssh/sshd_config文件来禁用密码身份验证。这有助于防止其他人在没有您的私钥的情况下使用SSH对您的计算机进行身份验证。为此,在具有sudo权限的文本编辑器中打开/etc/ssh/sshd_config并搜索字符串PasswordAuthentication,将默认行更改为:PasswordAuthenticationno保存并重新启动SSH服务器:$sudosystemctlrestartsshd&&echo"OK“OK$SSH的日常使用OpenSSH改变了人们对操作计算机的看法,使用户不再被束缚在他们面前的计算机上。使用SSH,您可以访问家中的任何一台计算机,或者有一个帐户的服务器,甚至移动和物联网设备。充分利用SSH还意味着为您的Linux终端解锁更多用途。如果您还没有使用过SSH,请尝试一下。尝试熟悉SSH并创建一些适当的密钥以更安全地使用您的计算机,而无需面对面。