服务器允许SSH连接,但不能使用公共密钥身份验证。目前(由于技术困难,而非组织上的原因)我无法更改此更改,但我会尽快解决!
我现在需要的是使用脚本中的普通旧帐户+密码身份验证在服务器上执行命令。也就是说,我需要以非交互方式进行操作。可能吗?我该怎么办呢?
将要执行脚本的客户端运行Ubuntu Server 8.04。该服务器运行Cygwin和OpenSSH。
服务器允许SSH连接,但不能使用公共密钥身份验证。目前(由于技术困难,而非组织上的原因)我无法更改此更改,但我会尽快解决!
我现在需要的是使用脚本中的普通旧帐户+密码身份验证在服务器上执行命令。也就是说,我需要以非交互方式进行操作。可能吗?我该怎么办呢?
将要执行脚本的客户端运行Ubuntu Server 8.04。该服务器运行Cygwin和OpenSSH。
Answers:
有一个名为的Linux实用程序sshpass
。它允许您完全按照自己的意愿进行操作,并且将服务器密码作为命令行参数或从文件中获取(我更喜欢这种方式,因此我的服务器密码不会显示在外壳程序历史记录中),并且您可以使用它像这样:
sshpass -f file_with_password ssh user@server ls -la
这将ssh放入服务器并运行ls -la
。不过,有一件事,您必须先手动将ssh放入服务器(如果尚未这样做),以便将该服务器添加到~/.ssh/known_hosts
。如果您不这样做,sshpass
将无法正常工作。
SSH_ASKPASS
变量是更通用的解决方案,可在任何具有OpenSSH的系统上使用,并且不需要安装其他软件。对于我们中的某些人(在受管制的行业中),安装新软件会触发大量管理工作。
SSH_ASKPASS
不适用于所有系统。即使客户端支持它,如果服务器使用,它也将无法工作keyboard-interactive
。在编写将authorized_keys
文件分发到许多嵌入式计算机的脚本时,我实际上已经遇到了这个问题。
取决于您使用的脚本语言。我现在几乎用python编写了所有脚本,这是没有问题的。pyssh和Paramiko都允许您简单地编写密码脚本,而不必大惊小怪。
如果您打算使用(ba)sh脚本并使用OpenSSH进行操作,则会变得更加困难。OpenSSH明确禁止您在命令行上输入密码(因为所有用户都可以使用诸如之类的东西来查看命令行)ps -fe
,这很不好。在这种情况下,您将必须直接与ssh程序进行交互并具有两个选项: