我需要登录到我在运行Ubuntu的远程主机上创建的用户。我不能使用
ssh
密钥,因为ssh登录将通过我无法访问的服务器中的bash脚本运行(请考虑诸如Bamboo之类的持续集成服务器)。 我知道这不是理想的做法,但我想将远程主机设置为不要求输入密码,或者能够使用
ssh --passsword foobar user@host
之类的名称登录,就像MySQL一样,您可以做登录。 我在
man ssh
中找不到此消息,并且对解决此问题可以采取任何替代措施。#1 楼
在Ubuntu上,安装sshpass
软件包,然后像这样使用它:sshpass -p 'YourPassword' ssh user@host
sshpass
还支持从文件或环境变量传递键盘交互密码,这可能会在任何与安全相关的情况下,都是更合适的选择。有关详细信息,请参见man sshpass
。评论
尽管不推荐这样做,也不是一个好的做法,但这恰恰是问题的答案。考虑使用如上所述的密钥。但是如果有重大技术问题,这就是解决方案
–有神论者
13年3月15日在17:14
我只支持答案。不是“理性的为什么不这样做呢”的答案。只是答案。因此,我投票给你:)
–邱汉ley
2014年3月2日在1:05
还要注意,您的计算机上的其他用户可能会通过运行w来查看您的密码。
– wchargin
2014-12-11 17:23
我并不完全讨厌sshpass,实际上我是在临时使用它。但是,使用“ -p”是不必要的,也是不希望的。首先设置变量SSHPASS,然后执行sshpass -e ssh
–安德鲁·沃尔夫(Andrew Wolfe)
15年3月23日在19:59
@Brad如果您具有root,则可以使用yum --enablerepo = epel install sshpass安装sshpass。
–likelikelike
2015年10月12日10:40
#2 楼
如果您的替代方法是将密码放入脚本或ssh
命令行或纯文本文件中,那么最好使用ssh
键代替。无论哪种方式,任何有权访问存储ssh
客户端脚本的帐户的人都可以使用该帐户进入服务器,但是至少在使用ssh
密钥的情况下,OpenSSH正确地支持它,您未授予通过ssh
以外的其他方式进行访问,如果需要的话,更容易将其撤消,等等... 您将不得不解释为什么您需要不使用ssh密钥的原因。
还应考虑使用强制命令(
command="..."
文件中的.ssh/authorized_keys
),以便客户端只能访问在服务器上运行其所需命令的权限,而不是完整的shell。评论
远程主机实际上是其他工程师使用的VM,除了测试自动化代码的副本外,没有其他资源值得冒险。为了便于讨论,可以说我唯一的访问权限是添加脚本文件,而不是在〜/ .ssh /中添加ssh键。
–mmla
2012年5月16日,0:20
这是非常人为的。较不那么人为的情况是服务器的误导管理员禁用了ssh密钥登录(/ etc / ssh / sshd_config中的PubkeyAuthentication no)。无论哪种情况,更好的解决方案都是解决导致您无法执行ssh密钥登录的根本问题。如果失败,请咨询Gilles指出的问题。
–塞拉达
2012年5月16日,0:29
@MichaelM您不必在〜/ .ssh /中添加ssh密钥。将密钥添加到任意位置,然后使用ssh -i / path / to / id_rsa
–随钻
2012年5月16日下午2:27
Stackexchanges答案应回答问题而不是认为问题正确。我有一个有效的方案。我需要在95个不同的框中设置我的〜/ .ssh / authorized_keys。我编写了一个脚本来自动推送我的authorized_keys文件,但仍然提示输入密码。一开始就让脚本提示输入密码会更好。
– L. Holanda
17年4月26日在23:33
我同意flarn2006。您不能说“这个问题很愚蠢,所以这是另一个问题的答案,因为我认为这是一个更好的问题,而且我知道它的答案”。
–尼克
18/12/13在19:43
#3 楼
首先,与其他答复者一样,我建议仅使用ssh键。但是我将假定控制服务器的人员根本不会允许您使用ssh密钥身份验证,而必须使用密码身份验证。您可以使用ControlMaster和ControlPath。
让A成为您无权访问的服务器(想像Bamboo这样的持续集成服务器),让C成为运行Ubuntu的远程主机。
现在让B成为您控制的计算机。如果您不能提供合适的B计算机,则此答案将无效。
创建密钥对并将公共部分添加到B的authorized_keys文件中。给A私钥。现在,您无需密码即可从A登录到B。
在B上手动登录
ssh -M -S /tmp/controlpath C
并在提示符下输入密码。之后,您应该可以不用密码ssh -S /tmp/controlpath C
从A登录C。在A上的脚本中,您可以编写
ssh B ssh C dostuff
。每次重新启动B时,将必须重新建立连接
ssh -M -S /tmp/controlpath C
。
评论
serverfault.com/questions/241588/…安全的方法是使用ssh-keygen -t rsa -b 2048生成SSH密钥,并使用此密钥登录到远程服务器(可以选择安装“ sshpash”),然后可以使用以下命令sshpass -p'密码'ssh username @ servername
重定向到的问题与此不相同。这是一种发起交互会话的方法。