我需要登录到我在运行Ubuntu的远程主机上创建的用户。我不能使用ssh密钥,因为ssh登录将通过我无法访问的服务器中的bash脚本运行(请考虑诸如Bamboo之类的持续集成服务器)。

我知道这不是理想的做法,但我想将远程主机设置为不要求输入密码,或者能够使用ssh --passsword foobar user@host之类的名称登录,就像MySQL一样,您可以做登录。

我在man ssh中找不到此消息,并且对解决此问题可以采取任何替代措施。

评论

serverfault.com/questions/241588/…

安全的方法是使用ssh-keygen -t rsa -b 2048生成SSH密钥,并使用此密钥登录到远程服务器(可以选择安装“ sshpash”),然后可以使用以下命令sshpass -p'密码'ssh username @ servername

重定向到的问题与此不相同。这是一种发起交互会话的方法。

#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