我有两台 ubuntu 计算机共享同一个 wifi,并希望从一个终端连接到另一台计算机。
首先在名为“Second”和主机名“Algorithms”的第二台计算机上创建一个用户
然后尝试使用 SSH 从另一个访问它,但得到错误报告为
$ ssh second@Algorithms
ssh: Could not resolve hostname algorithms: nodename nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)
我尝试的解决方案是基于网络的 - 从本地到达另一台计算机 - Ask Ubuntu
我的实验有什么问题?
use*_*186 21
ssh 在家庭局域网 (LAN) 内我假设有两个用户,每个用户都有自己的运行 Ubuntu 的计算机。
user1使用comp1和user2使用comp2.目标是user1远程访问comp2using 中user2的帐户comp2。
注:如果user1在一个账户comp2,并user1希望访问她的账户中comp2,从comp1后来她,她不必指定ssh命令的用户名。ssh comp2.local将工作。
ssh服务器在comp2为此,您需要comp2使用具有管理权限的帐户实际访问并登录它。我假设是,user2帐户。
ssh服务器桌面 Ubuntu 不附带任何服务器。要ssh进入comp2您首先需要安装openssh-server. 在打开终端comp2通过按Ctrl+ Alt+T并输入以下行一次一个:
sudo apt update
sudo apt install openssh-server
Run Code Online (Sandbox Code Playgroud)
您将被要求输入user2的密码。当您输入密码时,光标不会移动,看起来好像什么也没发生。这是正常的。Enter输入密码后点击。然后按照说明操作。
一旦openssh-server被安装,你会看到在共享名为“RemoteLogin”中设置一个新的选择,这将是“开”:
标准的 Ubuntu 桌面没有安装任何防火墙。如果您安装了防火墙,请确保它允许从 LAN 内连接到端口 22。说明将取决于特定的防火墙软件。
ssh本地测试仍然在正在运行的comp2测试终端ssh。输入命令:
ssh 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
该127.0.0.1指的是您正在使用的计算机的IP地址。换句话说,您正在尝试从 sshcomp2到comp2。如果一切顺利,系统会询问您是否确定要连接,然后询问您的密码。一旦您yes确定并输入密码,user2您将看到终端提示从 更改user2@comp2$为user2@127.0.0.1$。这表明您已经成功地从 sshedcomp2到它自己。
注意:由于user2在这种情况下同一个用户 ( ) 是 ssh-ing,因此您不需要ssh user2@127.0.0.1在 ssh 命令中指定。
ssh 从 comp1To sshfrom comp1tocomp2您可以使用计算机名称(主机名)或其 IP 地址。在终端中comp2使用ifconfig命令查找IP地址comp2。您将看到一个地址,如192.168.x.y, where xcan be 0or 1andy可以是2和之间的任何数字255。
在comp1输入中形成一个终端:
ssh user2@comp2.local
Run Code Online (Sandbox Code Playgroud)
或者
ssh user2@192.168.x.y
Run Code Online (Sandbox Code Playgroud)
注意:如果使用计算机名称,则必须.local在末尾添加。如果您使用本地 IP 地址,如果没有分配固定地址,它可能会不时更改。
确保端口 22 没有转发到家庭路由器中的任何计算机。这将防止来自家庭局域网之外的任何人使用 ssh 连接到家庭计算机。
这些说明是特定于路由器的,超出了本答案的范围,因为它与 Ubuntu 无关。
这是使用 ssh 的更安全的方式。它使用私钥-公钥对。私钥保留在建立 ssh 连接的受信任计算机中。在这种情况下comp1。公钥转到comp2。一旦密钥就位,您将在 .ssh 服务器中禁用基于密码的身份验证comp2。如果您在未确保基于密钥的身份验证工作的情况下禁用基于密码的身份验证,则 ssh 将不起作用,因为将无法对远程用户进行身份验证。
首先在user1@comp1. 这需要在每个用户和从您通过 ssh 连接到另一台计算机的每台本地计算机上完成。在终端输入:
ssh-keygen -t ed25519
Run Code Online (Sandbox Code Playgroud)
这是生成比 RSA 更新和更安全的密钥。如果您想要 RSA 类型的密钥,请输入:
ssh-keygen -t rsa -b 4096
Run Code Online (Sandbox Code Playgroud)
该过程将提示您输入密码。如果你不想要,你可以按回车键。如果您确实输入了密码,则每次从 sshcomp1到时都会要求您输入密码comp2。如果您使用密码短语,它不应与用于正常登录的密码相同。
接下来,您需要将公钥从 复制comp1到comp2。在终端comp1输入:
ssh-copy-id user2@comp2.local
Run Code Online (Sandbox Code Playgroud)
您将被要求输入user2in的登录密码comp2。如果您想通过 ssh 连接到家庭 LAN 中的其他计算机,user1@comp1那么您无需创建新的密钥对。user1@comp1使用上述命令将 的公钥复制到其他远程计算机中的其他用户帐户。
将公钥成功复制到user2账户后comp2再次尝试ssh:
ssh user2@comp2.local
Run Code Online (Sandbox Code Playgroud)
现在你应该可以comp2不用user2的密码进入了。此时,您可以使用您生成的密码或公钥登录。您可以通过在 中创建一个新用户(或使用现有的第二个用户)来测试这一点comp1,例如user1a。在这个阶段user1@comp1将能够user2@comp2使用公钥在没有密码的情况下进行 ssh 。另一方面user1a@comp1将能够 ssh 到user2@comp2将需要使用user2.
下一步是禁用基于密码的身份验证。您可能希望在comp2. 使用以下命令进行编辑/etc/ssh/sshd_config
须藤纳米 /etc/ssh/sshd_config
然后确保它包含以下几行并且没有注释:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Run Code Online (Sandbox Code Playgroud)
请注意,这些行可能不在一起。“未注释”意味着#在每一行前面都没有。
使用Ctrl+W保存更改,使用Ctrl+X退出编辑器。
最后,通过以下命令使用新设置重新启动 ssh 服务器:
sudo systemctl restart ssh
Run Code Online (Sandbox Code Playgroud)
现在,user1@comp1将仍然可以ssh到user2@comp2没有密码使用公共密钥。另一方面,user1a@comp1将获得拒绝ssh 的许可user2@comp2。
有很多防火墙软件,其中一些很难配置。我建议你安装ufw命令调用的“简单防火墙” :
sudo apt install ufw
Run Code Online (Sandbox Code Playgroud)
要打开端口 22 但仅从家庭 LAN 内使用以下命令:
sudo ufw allow from 192.168.x.0/24 to any port 22
Run Code Online (Sandbox Code Playgroud)
注意:根据您的路由器设置替换x为0或1。
此防火墙设置comp2阻止来自家庭 LAN 外部的任何人使用 ssh 连接到comp2. 但是,它允许家庭局域网内的任何人(使用任何计算机)尝试通过 ssh 进入comp2. 如果comp2从家中移除并带到其他地方并连接到另一个“类似”网络,例如通过 WiFi,则该网络中的所有计算机都将被comp2此防火墙设置允许访问端口 22 。出于这个原因,我建议禁用基于密码的身份验证,并在所有运行 ssh 服务器的计算机中使用基于私钥-公钥的身份验证。
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
24714 次 |
| 最近记录: |