【发布时间】:2011-06-03 10:36:08
【问题描述】:
AFAIK,命令ssh 或scp 没有/带密码参数。否则,我可以将密码保存在 shell 变量中,并可能摆脱输入密码提示。如果我在我的 shell 脚本中编写 scp 命令,它会提示用户输入密码。我的脚本中有多个 ssh 和 scp 命令,我不希望用户每次都输入密码。我宁愿在开始时将密码保存在 shell 变量中(通过询问密码一次),然后将其用于每个 ssh 或 scp。
我在this question 中读到了“公钥识别”。是否与我正在寻找的解决方案有关?
更新
我在How to use ssh command in shell script? 中读到了为什么在命令行上指定密码是不安全的。使用expect 是否也存储密码并且是世界可见的(使用ps aux)?这是使用expect 的安全问题吗?
进一步说明
为了更清楚地说明,我正在编写这个 shell 脚本来自动化代码和数据库备份、执行代码上传、运行必要的数据库查询、执行从开发人员系统发布 LAMP project 的新版本所需的所有事情到远程实时服务器。我的 shell 脚本将在每个开发人员实例的项目主代码库中。
要求
-
我希望所有开发人员(都可能在不同的远程系统上工作)知道 SSH/FTP 密码,以便能够通过仅在运行时输入相同的 ssh/ftp 密码来使用 shell。我希望密码是 ssh/ftp 密码
注意 - 我不希望其他不知道 SSH 密码的开发者能够使用它(所以我猜公钥认证将不起作用,因为它将密码存储在系统中)。
- 我不想要任何命令行解决方案,它会将密码存储在系统的某个日志中,并且可以使用 ps aux 或其他工具让世界可见。
开放赏金
从到目前为止的所有答案以及我对这些解决方案的分析来看,看起来除了公钥认证之外,其他所有的都是不安全的。我还不确定使用expect 是否不安全。我认为这对我来说是正确的解决方案。在这种情况下,我在尝试执行此操作时遇到命令未找到错误,正如已对其中一个答案发表的评论一样。
来自http://www.debianadmin.com/sshpass-non-interactive-ssh-password-authentication.html -
首先,sshpass 的用户 应该意识到ssh的坚持 仅获取密码 互动不是没有道理的。 几乎不可能 安全地存储密码和用户 sshpass 应该考虑是否 ssh 的公钥认证 提供相同的最终用户体验, 同时涉及更少的麻烦和存在 更安全。
那么,是否可以通过输入 ssh/ftp 密码来安全地运行多个 ssh、scp 命令(如果在运行时只运行一次?请再次阅读我的要求部分。
还有,谁能解释一下这个-
尤其是编写程序的人 满足的意思是 沟通以上几点)密码 鼓励以编程方式使用 匿名管道并通过管道的 使用 -d 读取到 sshpass 选项。
这是否意味着一切皆有可能?
【问题讨论】:
-
您应该使用
ssh-agent而不是这种非常不安全的方法。 -
ssh和scp是外部实用程序,而不是 Bash shell 命令。 -
@İsmail 'cartman' Dönmez - 你能解释一下或给我发一些解释的链接吗?我是 shell 新手,所以不知道如何存储在密码中不太安全。
-
@Sandeepan Nath,见mah.everybody.org/docs/ssh
-
对不起,我的意思是解释在变量中存储密码是不安全的事实。