服务器允许SSH连接,但不能使用公钥authentication。 目前我无权改变这种情况(由于技术上的困难,而不是组织上的),但我会尽快完成!
我现在需要的是在服务器上使用普通的旧帐号+密码authentication从脚本执行命令。 也就是说,我需要以非交互的方式来做到这一点。 可能吗? 我该怎么做?
将执行脚本的客户端运行Ubuntu Server 8.04。 服务器运行Cygwin和OpenSSH。
有一个名为sshpass的Linux实用程序。 它可以让你做到你想要的,并将服务器密码作为命令行参数,或从一个文件(我喜欢这种方式,所以我没有我的服务器密码显示在shell历史logging),你使用它像这样:
sshpass -f file_with_password ssh user@server ls -la
这将ssh到服务器并运行ls -la 。 但是有一件事,你必须首先手动ssh到服务器(如果你还没有这样做的话),所以服务器会被加到你的~/.ssh/known_hosts 。 如果你不这样做, sshpass将无法正常工作。
您可以使用Expect来执行此操作。 显然,从安全angular度来看,这是不可取的,因为它要求你使用一个脚本,它包含你的密码明文。 (但是我不会因为你在你的问题中说你打算尽快使用公钥authentication而放弃这一点!)
取决于您使用的脚本语言。 我现在几乎所有的python脚本,这是一个没有问题。 pyssh和Paramiko都可以让你简单的编写密码。
如果你打算用(ba)sh脚本来做,而使用OpenSSH,则会变得更困难。 OpenSSH明确地禁止你在命令行上input密码(因为所有用户都可以使用类似ps -fe的命令行来查看命令行,这是不好的)。 在这种情况下,您将不得不直接与ssh程序交互,并有两个选项: