San*_*ath 11 variables ssh bash shell
AFAIK,命令ssh
或scp
没有/接受密码参数.否则我可以将密码保存在shell变量中,并可能摆脱输入密码提示.如果我在shell脚本中编写scp命令,则会提示用户输入密码.我的脚本中有多个ssh和scp命令,我不希望用户每次都输入密码.我更喜欢在开头的shell变量中保存密码(通过询问密码一次),然后将其用于每个ssh或scp.
我在这个问题中读到了"公钥识别" .它与我正在寻找的解决方案有关吗?
更新
我读了如何在shell脚本中使用ssh命令?为什么在命令行上指定密码是不安全的.使用是否expect
也存储密码并且是世界可见的(使用ps aux
)?这是使用安全问题expect
吗?
进一步说明
为了进一步说清楚,我正在编写这个shell脚本来自动执行代码和数据库备份,执行代码上载,运行必要的数据库查询,从开发人员系统执行LAMP项目的新版本所需的所有操作到远程实时服务器.我的shell脚本将存在于每个开发人员实例中项目的主代码库中.
需求
我希望所有开发人员(可能都是从不同的远程系统工作)知道SSH/FTP密码,只能在运行时输入ssh/ftp密码才能使用shell.我更喜欢密码是ssh/ftp密码
注意 -我不希望其他不知道SSH密码的开发人员能够使用它(所以我猜公钥验证不起作用,因为它将密码存储在系统中).
开放赏金
从目前为止的所有答案和我对这些解决方案的分析看来,除了公钥认证之外,其他所有其他都是不安全的.我还不确定使用expect
是不安全的.我认为这对我来说是正确的解决方案.在这种情况下,我在尝试执行此操作时遇到命令未找到错误,因为已经对其中一个答案进行了评论.
来自http://www.debianadmin.com/sshpass-non-interactive-ssh-password-authentication.html -
首先,sshpass的用户应该意识到ssh只能以交互方式获取密码并不是没有理由的.安全地存储密码几乎是不可能的,sshpass的用户应该考虑ssh的公钥认证是否提供相同的最终用户体验,同时减少麻烦和更安全.
那么,是不是可以通过输入ssh/ftp密码安全地运行多个ssh,scp命令(如果只是在运行时一次?请再次阅读我的需求部分.
此外,任何人都可以解释这个 -
特别是,编写满足程序的人员需要以上的方式传达上述要点.建议使用匿名管道密码,并使用-d选项将管道的读取端传递给sshpass.
这是否意味着什么是可能的?
实际上,你肯定想要研究设置ssh密钥,而不是在bash脚本中保存密码.如果密钥是无密码的,则ssh/scp不需要用户输入.您只需将其设置为在两端使用密钥,然后保护通信.
但是,如果我不这样说的话,我会陷入地狱.许多人认为无密码ssh密钥是Bad Idea(TM).如果有人拿到钥匙,那么就可以完全进入.这意味着您依赖其他安全措施(如文件权限)来保护您的密码安全.
另外,看看ssh-agent.它允许您进行设置,以便您拥有受密码保护的ssh-key,但您只需要输入一次,它将为您管理密钥的密码并在必要时使用它.在我家的Linux机器上,我已经设置ssh-agent在我的.xinitrc文件中运行,以便它提示我一次然后启动X. YMMV.
更新:
关于您的要求,密码保护的公钥认证+ ssh-agent似乎仍然适合.只有熟悉SSH/FTP密码的开发人员才能启动ssh-agent,输入密码,ssh-agent将管理会话其余部分的公钥密码,从不再需要交互.
当然,它如何存储它完全是另一回事.IANASE,但是有关使用ssh-agent的安全问题的更多信息,我发现赛门铁克的文章内容非常丰富:http://www.symantec.com/connect/articles/ssh-and-ssh-agent
"ssh-agent创建一个unix域套接字,然后在此套接字上侦听来自/ usr/bin/ssh的连接.它依赖于简单的unix权限来阻止访问此套接字,这意味着您放入代理的任何密钥任何可以连接到此套接字的人都可以使用.[即.root]"...
"但是,[..]它们仅在代理运行时可用 - root可以使用您的代理对其他系统上的帐户进行身份验证,但它不能直接访问密钥本身.这意味着密钥不能从机器上取下并无限期地从其他地方使用."
希望你不是在尝试使用不受信任root
的系统的情况下.
正确的方法如下:
确保所有用户都使用ssh-agent(现在这是大多数Linux系统的默认设置).您可以检查它运行以下命令:
echo $ SSH_AUTH_SOCK
如果该变量不为空,则表示用户正在使用ssh-agent.
为每个用户创建一对身份验证密钥,确保它们受非空密码短语保护.
在远程主机上安装身份验证密钥的公共部分,以便用户可以在那里登录.
你完成了!
现在,用户第一次想要从某个会话登录到远程计算机时,必须输入其私钥的密码.
在稍后来自同一会话的登录中,ssh-agent将代表用户提供解锁的密钥以进行身份验证,而不需要再次引入密码.
归档时间: |
|
查看次数: |
36101 次 |
最近记录: |