如何使用Bash输入SSH密码?

89

每天我都通过ssh连接到服务器。我经历以下例程:

IC001:Desktop user$ ssh user@my.server.com
user@my.server.com's password: 

Last login: Tue Jun  4 10:09:01 2013 from 0.0.0.0
$

我想自动化这个过程,并创建一个Bash脚本来为我完成。我不关心安全性,可以公开存储我的密码在脚本中。在脚本执行时,我也可以在屏幕上公开输入密码。所以我创建了这个:

#!/bin/bash          
ssh user@my.server.com
echo mypassword

但它不起作用。我也尝试了send而不是echo,但它也没有起作用。请指导是否可能实现。


https://help.ubuntu.com/community/SSH/OpenSSH/Keys - Kevin
4
@Kevin,我不负责服务器。我只是连接到它们的用户。我不被允许修改服务器上的任何内容。 - Prostak
1
也:https://dev59.com/jW445IYBdhLWcg3wmLdd?rq=1 https://dev59.com/kmrXa4cB1Zd3GeqPBKFO?rq=1 https://dev59.com/B1DTa4cB1Zd3GeqPLroK?rq=1 - clt60
1
在服务器上,您只需要在主目录中的配置文件中添加一行即可。如果您连这个都做不到,那还能做什么呢? - Kevin
2
@Kevin,读取日志...但这不相关。 - Prostak
2个回答

187

如果您无法使用密钥,请仔细检查两次。

否则请使用expect:

#!/usr/bin/expect -f
spawn ssh user@my.server.com
expect "assword:"
send "mypassword\r"
interact

129
“assword”是一个错别字还是有意而为之? - Jonathan Dumaine
205
旨在:它匹配 Passwordpassword - michas
6
我在TextExpander中尝试了这个,但是出现了“spawn:command not found”的错误提示。我尝试过不带关键字运行这个命令,但是没有任何反应。 - jowie
6
你需要安装 expect,可以通过输入命令 sudo apt-get install expect 进行安装。之后你就可以使用 spawn 命令了。 - thiagoh
24
嘲笑那个“嗯……”的评论。 - mancini0
显示剩余2条评论

96

创建一个新的密钥对:(使用默认设置)

ssh-keygen

将公钥复制到服务器:(最后一次输入密码)

ssh-copy-id user@my.server.com
从现在开始,服务器应该识别您的密钥,不再要求输入密码:
ssh user@my.server.com

5
你只能有非常有限的访问权限到一个管理员已经封锁了安全措施的服务器,而你想把密码以明文形式留存在你的设备上,因为服务器所有者的安全担忧令你感到麻烦。我的理解是否正确?为什么不询问系统管理员对你的脚本有何看法呢? - msw
1
需要执行以下命令:ssh-agent bash && ssh-add,如此链接中所示http://www.solomonson.com/content/setting-ssh-agent-ask-passphrase-only-once,才能使其正常工作。 - Gary Thomann
5
哦,糟糕!哈哈,@Prostak。我会尽最大努力将我的问题简化到最少,这样回答者/评论者就不会因为与实际问题无关的事情而心烦意乱。 - Chev
7
如果您使用的是OSX或其他没有ssh-copy-id命令的操作系统,那么可以在这里找到一行替代命令来将您的SSH公钥从没有ssh-copy-id命令的机器复制到服务器上。 - Chev
4
@Chev,另外,ssh-copy-id可以从Homebrew获取。 - robert
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接