我有两台 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
进行远程访问。comp2
user2
comp2
笔记:如果user1
在 中有帐户comp2
,并且user1
希望从 访问她的帐户,comp2
那么comp1
她就不必在 ssh 命令中指定用户名。ssh comp2.local
就可以了。
在中设置ssh
服务器comp2
为此,您需要亲自前往comp2
并使用具有管理权限的帐户登录。我假设是user2
帐户。
安装ssh
服务器
桌面版 Ubuntu 不附带任何服务器。要ssh
进入comp2
,您首先需要安装。按+ +openssh-server
打开终端,然后逐行输入以下行:comp2
CtrlAltT
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 地址。换句话说,您正在尝试从 sshcomp2
到comp2
。如果一切顺利,系统将询问您是否确定要连接,然后询问您的密码。一旦您回答yes
确定并输入密码,user2
您将看到终端提示符从 变为user2@comp2$
。[email protected]$
这表明您已成功从 sshcomp2
到 本身。
笔记:由于在这种情况下同一个用户(user2
)正在使用 ssh,因此您无需在 ssh 命令中指定。ssh [email protected]
ssh
从comp1
要从ssh
到comp1
,comp2
您可以使用计算机名称(主机名)或其 IP 地址。要查找 的 IP 地址,comp2
请使用ifconfig
终端中的命令comp2
。您将看到类似 的地址192.168.x.y
,其中x
可以是0
或1
,可以是和y
之间的任何数字。2
255
从终端comp1
输入:
ssh [email protected]
或者
ssh [email protected]
笔记:如果使用计算机名称,则必须.local
在末尾添加。如果使用本地 IP 地址,如果没有分配固定地址,则它可能会不时更改。
安全问题
- 路由器设置
- 启用基于公钥的身份验证并禁用基于密码的身份验证。
- 安装和配置防火墙
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
到其他远程计算机中的其他用户帐户。
一旦公钥成功复制到帐户user2
,comp2
请再次尝试 ssh:
ssh [email protected]
comp2
现在,您无需输入密码即可进入user2
。此时,您可以使用密码或您生成的公钥登录。您可以通过在 中创建一个新用户(或使用现有的第二个用户)来测试这一点comp1
,例如user1a
。在此阶段,user1@comp1
将能够user2@comp2
使用公钥无需密码 ssh 到 。另一方面,user1a@comp1
需要使用 的密码user2
ssh 到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
笔记:根据您的路由器设置,x
用0
或替换。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]