我有一个远程服务器。我计划使用公钥通过 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
。
重要的:
如果您连接到的服务器未知,或者其公钥未存储在您的计算机中,则此操作将会失败。如果这似乎不起作用,只需连接一次(ssh
或scp
)到远程计算机并接受其公钥。
参考
答案2
sshpass
如果您是系统的唯一用户,则可以使用。但这绝对是一个非常糟糕的主意。如果每个人都可以通过 shell 访问您的计算机,那么他就可以获取您的密码。
一旦无法交换公钥。我建议你使用expect
.您需要保护exp
包含密码的文件。它将存储在您的硬盘上,因此每个拥有 sudo 或 root 访问权限的用户都可以破解它。但至少它确实比sshpass
.
答案3
正如其他答案中已经描述的那样,我也使用它,sshpass
但我将它与read
命令结合起来,将我的密码存储在临时环境变量中。这样我的密码就永远不会被明文写在任何地方。这是我使用的一行命令:
read -s PASS; sshpass -p $PASS ssh <user>@<host adress>
之后,您必须输入密码(屏幕上不会显示任何内容),然后按 Enter 键将打开连接。