服务器允许 SSH 连接,但不允许使用公钥身份验证。目前我无法更改此设置(由于技术困难,而非组织原因),但我会尽快进行更改!
我需要的现在是在服务器上使用普通的账号+密码身份验证脚本也就是说,我需要以非交互方式进行操作。可以吗?我该怎么做?
执行脚本的客户端运行 Ubuntu Server 8.04。服务器运行 Cygwin 和 OpenSSH。
答案1
有一个名为 的 Linux 实用程序sshpass
。它允许您执行您想要的操作,并将服务器密码作为命令行参数或从文件中获取(我更喜欢这种方式,因此我的服务器密码不会显示在 shell 历史记录中),您可以像这样使用它:
sshpass -f file_with_password ssh user@server ls -la
这将通过 ssh 连接到服务器并运行ls -la
。但是,您必须先手动通过 ssh 连接到服务器(如果您还没有这样做),这样服务器才会添加到您的~/.ssh/known_hosts
。如果您不这样做,sshpass
将无法工作。
答案2
您可以使用预计这样做。显然,从安全角度来看,这不是更好的选择,因为这将要求您使用包含明文密码的脚本。(但我不会过多地讨论这一点,因为您在问题中说您计划尽快使用公钥身份验证!)
答案3
取决于您使用的脚本语言。我现在几乎用 Python 编写了所有内容,这不是问题。pyssh 和 Paramiko 都可以让您轻松地编写密码脚本,而无需大惊小怪。
如果您打算使用 (ba)sh 脚本并使用 OpenSSH 来执行此操作,则难度会更大。OpenSSH 明确禁止您在命令行上输入密码(因为所有用户都可以使用类似 的命令来查看命令行ps -fe
,这是不好的)。在这种情况下,您必须直接与 ssh 程序交互,并且有两个选择:
- 您可以使用 Expect 之类的工具编写大量支持代码。
- 您使用 SSH_ASKPASS 变量进行破解,告诉它调用一个返回您的密码的应用程序并将其作为批处理作业运行,以防止它从终端读取。