Deleted Asked: 2010-04-15 10:15:42 +0800 CST2010-04-15 10:15:42 +0800 CST 2010-04-15 10:15:42 +0800 CST 通过 SSH 连接并自动输入密码,无需使用公钥 772 服务器允许 SSH 连接,但不使用公钥认证。目前我无法更改此设置(由于技术困难,而不是组织),但我会尽快完成! 我现在需要的是使用脚本中的普通旧帐户+密码身份验证在服务器上执行命令。也就是说,我需要以非交互方式进行。可能吗?我该怎么做? 将执行脚本的客户端运行 Ubuntu Server 8.04。服务器运行 Cygwin 和 OpenSSH。 linux ssh 3 个回答 Voted Best Answer solefald 2010-04-16T09:13:25+08:002010-04-16T09:13:25+08:00 有一个名为sshpass. 它允许您完全按照您的意愿进行操作,并将服务器密码作为命令行参数或从文件中获取(我更喜欢这种方式,所以我的服务器密码不会显示在 shell 历史记录中)然后您使用它像这样: sshpass -f file_with_password ssh user@server ls -la 这将 ssh 进入服务器并运行ls -la. 但是,有一件事,您必须先手动 ssh 到服务器(如果您还没有这样做的话),因此服务器会被添加到您的~/.ssh/known_hosts. 如果您不这样做,sshpass将无法正常工作。 Mox 2010-04-15T10:19:59+08:002010-04-15T10:19:59+08:00 您可以使用Expect来执行此操作。显然,从安全的角度来看,这并不可取,因为它需要您使用包含明文密码的脚本。(但我不会强调这一点,因为您在问题中说过您计划尽快使用公钥认证!) pehrs 2010-04-15T10:37:24+08:002010-04-15T10:37:24+08:00 取决于您使用的脚本语言。我现在用 python 编写几乎所有的东西,这不是问题。pyssh 和 Paramiko 都可以让您轻松编写密码脚本。 如果您打算使用 (ba)sh 脚本并使用 OpenSSH,它会变得更加困难。OpenSSH 明确地阻止您在命令行上输入密码(因为所有用户都可以使用类似的东西看到命令行ps -fe,这很糟糕)。在这种情况下,您将不得不直接与 ssh 程序进行交互,并且有两个选项: 您可以使用诸如 Expect 之类的东西编写大量支持代码。 您使用 SSH_ASKPASS 变量进行了破解,告诉它调用返回密码的应用程序并将其全部作为批处理作业运行,以防止它从终端读取。
有一个名为
sshpass
. 它允许您完全按照您的意愿进行操作,并将服务器密码作为命令行参数或从文件中获取(我更喜欢这种方式,所以我的服务器密码不会显示在 shell 历史记录中)然后您使用它像这样:sshpass -f file_with_password ssh user@server ls -la
这将 ssh 进入服务器并运行
ls -la
. 但是,有一件事,您必须先手动 ssh 到服务器(如果您还没有这样做的话),因此服务器会被添加到您的~/.ssh/known_hosts
. 如果您不这样做,sshpass
将无法正常工作。您可以使用Expect来执行此操作。显然,从安全的角度来看,这并不可取,因为它需要您使用包含明文密码的脚本。(但我不会强调这一点,因为您在问题中说过您计划尽快使用公钥认证!)
取决于您使用的脚本语言。我现在用 python 编写几乎所有的东西,这不是问题。pyssh 和 Paramiko 都可以让您轻松编写密码脚本。
如果您打算使用 (ba)sh 脚本并使用 OpenSSH,它会变得更加困难。OpenSSH 明确地阻止您在命令行上输入密码(因为所有用户都可以使用类似的东西看到命令行
ps -fe
,这很糟糕)。在这种情况下,您将不得不直接与 ssh 程序进行交互,并且有两个选项: