ssh在家庭局域网 (LAN) 内

ssh在家庭局域网 (LAN) 内

我有两台 ubuntu 计算机共享同一个 wifi,并希望从一台终端访问另一台。

首先在第二台计算机上创建一个名为“Second”的用户和主机名“Algorithms”

然后尝试使用 SSH 从另一个服务器访问它,但收到错误报告

$ ssh second@Algorithms  
ssh: Could not resolve hostname algorithms: nodename nor servname provided, or not known

我尝试的解决方案基于网络 - 从本地访问其他计算机 - 询问 Ubuntu

我的实验出了什么问题?

答案1

ssh在家庭局域网 (LAN) 内

我假设有两个用户,每个用户都有自己的运行 Ubuntu 的计算机。

  • user1使用comp1
  • user2用途comp2

目标是使用的帐户user1进行远程访问。comp2user2comp2

笔记:如果user1在 中有帐户comp2,并且user1希望从 访问她的帐户,comp2那么comp1她就不必在 ssh 命令中指定用户名。ssh comp2.local就可以了。

在中设置ssh服务器comp2

为此,您需要亲自前往comp2并使用具有管理权限的帐户登录。我假设是user2帐户。

安装ssh服务器

桌面版 Ubuntu 不附带任何服务器。要ssh进入comp2,您首先需要安装。按+ +openssh-server打开终端,然后逐行输入以下行:comp2CtrlAltT

sudo apt update
sudo apt install openssh-server

系统会要求user2您输入 的密码。输入密码时光标不会移动,看起来好像什么都没有发生。这是正常现象。Enter输入密码后点击。然后按照说明操作。

openssh-server安装后,您将在共享下的设置中看到一个名为“RemoteLogin”的新选项,并且它将处于“开启”状态:

在此处输入图片描述

标准 Ubuntu 桌面未安装任何防火墙。如果安装了防火墙,请确保它允许从 LAN 内部连接到端口 22。具体说明取决于具体的防火墙软件。

ssh本地测试

comp2仍在正在运行的测试终端ssh。输入命令:

ssh 127.0.0.1

127.0.0.1的是您正在使用的计算机的 IP 地址。换句话说,您正在尝试从 sshcomp2comp2。如果一切顺利,系统将询问您是否确定要连接,然后询问您的密码。一旦您回答yes确定并输入密码,user2您将看到终端提示符从 变为user2@comp2$[email protected]$这表明您已成功从 sshcomp2到 本身。

笔记:由于在这种情况下同一个用户(user2)正在使用 ssh,因此您无需在 ssh 命令中指定。ssh [email protected]

sshcomp1

要从sshcomp1comp2您可以使用计算机名称(主机名)或其 IP 地址。要查找 的 IP 地址,comp2请使用ifconfig终端中的命令comp2。您将看到类似 的地址192.168.x.y,其中x可以是01,可以是和y之间的任何数字。2255

从终端comp1输入:

ssh [email protected]

或者

ssh [email protected]

笔记:如果使用计算机名称,则必须.local在末尾添加。如果使用本地 IP 地址,如果没有分配固定地址,则它可能会不时更改。

安全问题

  1. 路由器设置
  2. 启用基于公钥的身份验证并禁用基于密码的身份验证。
  3. 安装和配置防火墙

1. 路由器设置

确保端口 22 未转发到家庭路由器中的任何计算机。这将阻止家庭 LAN 之外的任何人使用 ssh 连接到家庭计算机。

这些说明是针对路由器的,超出了本答案的范围,因为它与 Ubuntu 无关。

如果你确实想设置端口转发,请参阅如何从外面通过互联网访问家里的 ssh 服务器?

2. 启用基于公钥的身份验证并禁用基于密码的身份验证

这是使用 ssh 的更安全的方法。它使用私钥-公钥对。私钥保留在建立 ssh 连接的受信任计算机中。在本例中comp1。公钥转到comp2。密钥到位后,您将在 中的 ssh 服务器中禁用基于密码的身份验证comp2。如果您在未确保基于密钥的身份验证正常工作的情况下禁用基于密码的身份验证,则 ssh 将无法工作,因为将无法对远程用户进行身份验证。

首先在 中生成私钥-公钥对user1@comp1。这需要在每个用户和每台通过 ssh 连接到另一台计算机的本地计算机上完成。在终端中输入:

ssh-keygen -t ed25519

这将生成比 RSA 更新、更安全的密钥。如果您想要 RSA 类型的密钥,请输入:

ssh-keygen -t rsa -b 4096

Enter该过程将提示您输入密码。如果您不需要密码,可以点击。如果您输入了密码,则每次从 sshcomp1到 时都会要求您输入comp2密码。如果您使用密码,则它不应与正常登录使用的密码相同。

接下来你需要将公钥从comp1复制到comp2。在终端中comp1输入:

ssh-copy-id [email protected]

系统会要求您输入user2中的登录密码comp2。如果您想要从 ssh 连接到家庭局域网中的其他计算机,user1@comp1则无需创建新的密钥对。使用上述命令将 的公钥复制user1@comp1到其他远程计算机中的其他用户帐户。

一旦公钥成功复制到帐户user2comp2请再次尝试 ssh:

ssh [email protected]

comp2现在,您无需输入密码即可进入user2。此时,您可以使用密码或您生成的公钥登录。您可以通过在 中创建一个新用户(或使用现有的第二个用户)来测试这一点comp1,例如user1a。在此阶段,user1@comp1将能够user2@comp2使用公钥无需密码 ssh 到 。另一方面,user1a@comp1需要使用 的密码user2ssh 到user2@comp2

下一步是禁用基于密码的身份验证。您可能希望在 的终端中本地执行此操作comp2。使用以下命令在以下位置创建新文件/etc/ssh/sshd_config.d/

sudo nano /etc/ssh/sshd_config.d/10-nopasswords

然后添加以下几行:

PasswordAuthentication no
KbdInteractiveAuthentication no

ChallengeResponseAuthentication no

在较新版本的 ssh 服务器中:sshd)配置选项质询响应认证已被替换为Kbd 交互式身份验证。 谢谢RL-S指出这一点。

使用Ctrl+O保存更改,使用Ctrl+X退出编辑器。

最后,通过以下命令使用新设置重新启动 ssh 服务器:

sudo systemctl restart ssh

现在user1@comp1仍然能够使用公钥无需密码即可 ssh 到user2@comp2。另一方面user1a@comp1将获得没有权限到 ssh 到user2@comp2

3. 安装并配置防火墙

防火墙软件有很多,有些比较难配置,建议你安装“简易防火墙”,ufw命令如下:

sudo apt install ufw

要打开端口 22,但仅限于家庭 LAN 内,请使用以下命令:

sudo ufw allow from 192.168.x.0/24 to any port 22 

笔记:根据您的路由器设置,x0或替换。1

中的防火墙设置comp2阻止家庭局域网之外的任何人使用 ssh 连接到comp2。但是,它允许家庭局域网内的任何人(使用任何计算机)尝试通过 ssh 进入comp2。如果comp2离开家并被带到其他地方并连接到另一个“类似”网络(例如通过 WiFi),则comp2该防火墙设置将允许该网络中的所有计算机访问 的端口 22。出于这个原因,我建议禁用基于密码的身份验证,并在运行 ssh 服务器的所有计算机上使用基于私钥-公钥的身份验证。

希望这可以帮助

答案2

也许尝试通过 IP 而不是主机名来 ssh?

你可以使用以下方式检查 IPifconfig

答案3

/etc/hosts像这样向文件中添加一个字符串:

<IP_ADDRESS_OF_YOUR_ALGORITHMS_HOST> algorithms

例如:

192.168.168.168 algorithms

保存/etc/hosts并尝试再次连接。

无论如何,作为一种快速解决方案,您始终可以通过 IP 地址直接连接:

ssh [email protected]

相关内容