如何使用自动密码且无需密钥来 ssh 到远程服务器?

如何使用自动密码且无需密钥来 ssh 到远程服务器?

我有一个远程服务器。我计划使用公钥通过 ssh 进行连接,而无需输入密码,但远程系统拒绝公钥身份验证。

那么最好的方法是什么?使用怎么样sshpass

答案1

编辑

从我用作参考的链接中,您可以找到更多选项。

如果您已sshpass安装,则可以自动进行 ssh 连接,这样您就无需为每台计算机输入密码:

SSHPASS='password'
  sshpass -e  your commands here

1. 安装sshpass

这是一个漂亮的小程序,允许您将ssh密码作为命令行参数传递。显然,这不是一个非常安全的解决方案,我强烈建议您阅读 的“安全注意事项”部分man sshpass

无论如何,它可能在您的发行版的存储库中可用,在基于 Debian 的系统上可以使用以下命令安装它

sudo apt-get install sshpass

我无法检查,因为我没有基于 RedHat 的机器,但据我从搜索中可以得知这里,它应该可以安装在 Fedora 上

sudo yum install sshpass

安装完成后,您可以简单地运行

SSHPASS='password'
  sshpass -e your commands

-e选项指示sshpass从变量中获取密码SSHPASS。这比将其作为选项的参数提供更安全一些-p

重要的:

如果您连接到的服务器未知,或者其公钥未存储在您的计算机中,则此操作将会失败。如果这似乎不起作用,只需连接一次(sshscp)到远程计算机并接受其公钥。

参考

在网络中自动化 scp 的脚本

答案2

sshpass如果您是系统的唯一用户,则可以使用。但这绝对是一个非常糟糕的主意。如果每个人都可以通过 shell 访问您的计算机,那么他就可以获取您的密码。

一旦无法交换公钥。我建议你使用expect.您需要保护exp包含密码的文件。它将存储在您的硬盘上,因此每个拥有 sudo 或 root 访问权限的用户都可以破解它。但至少它确实比sshpass.

以下是具体操作方法

答案3

正如其他答案中已经描述的那样,我也使用它,sshpass但我将它与read命令结合起来,将我的密码存储在临时环境变量中。这样我的密码就永远不会被明文写在任何地方。这是我使用的一行命令:

read -s PASS; sshpass -p $PASS ssh <user>@<host adress>

之后,您必须输入密码(屏幕上不会显示任何内容),然后按 Enter 键将打开连接。

相关内容