有没有办法通过一个密码给ssh动。我想自动ssh的服务器 没有 使用公用钥匙验证或脚本期望,通过某种方式获得ssh读密码标准输入或文件。

其原因必须这样这是我想到我的备份文件服务器使用可/ssh运行为计划任务的工作。这个服务器支架我的家目录 它进行身份验证我的,所以使用公共钥匙证不起作用,因为~/.ssh不适用,直到以后的登录是成功的。期望(1)出的问题,因为我会喜欢运行它作为一个定时的工作,并因为计划任务的工作不下运行的终端结合的期待/ssh只是不起作用。我没有根访问服务器,它将难以获得管理员做出任何改变事物的方式在那里工作。

有帮助吗?

解决方案

使用 sshpass

例如,当密码位于 password.txt 文件中时:

sshpass -fpassword.txt ssh username@hostname

(摘自类似问题的答案)

其他提示

  

期望是不可能的,因为我想将它作为一个cron工作运行,   并且由于cron作业不在终端下运行expect / ssh的组合   只是不起作用

您可以从cron运行expect脚本,至少可以使用期望的库,例如“pexpect”。对于Python。我刚刚对此进行了测试以确认,从cron运行pexpect scp / ssh脚本,我能够成功地从运行在cron中的Python脚本中scp一个文件。

示例代码:

#!/usr/bin/python

import pexpect

FILE="/path/to/file"
REMOTE_FILE=""
USER="user"
HOST="example.com"
PASS="mypass"
COMMAND="scp -oPubKeyAuthentication=no %s %s@%s:%s" % (FILE, USER, HOST, REMOTE_FILE)

child = pexpect.spawn(COMMAND)
child.expect('password:')
child.sendline(PASS)
child.expect(pexpect.EOF)
print child.before

而不是通过你的密码使用一种公共/私人钥匙系统。增加公众关键机的授权键名单上所有的机器你要连接。使用这种方法SSH可以验证键自动并没有密码是必需的。

你可以找到的说明: http://linuxproblem.org/art_9.html

因为我刚刚读到的问题更加小心,你可能想看看周围的一个不同的SSH的客户支持的密码认证,而不用户相互作用。我快速的谷歌搜索暗示,它们的存在(http://www.derkeiler.com/Newsgroups/comp.security.ssh/2004-12/0134.html)

有关计算器问题:

本讨论讨论了您要做的事情:

http://cygwin.com/ml/cygwin/2004-02 /msg01449.html

如果你不能让admin为你创建一个本地目录,那么这将不起作用。

SSH需要“信仰的飞跃”。确保最初的握手以防止未来的篡改。 (您最初信任服务器为您提供的密钥)

目前可用但不是众所周知的方法是使用SSH-SRP。这使用相互密码知识对您进行身份验证并提供安全加密ssh会话所需的会话加密密钥。

它比SSH最初的“信任我”更安全。并且不需要长期存储密钥。

请勿使用expect,pexpect等提供密码。如果你这样做,你的密码必须在明文的某个地方,这实际上可以比使用无密码的公钥/私钥对更安全安全。这是更多的工作!

从“SSH:The Definitive Guide”中读取此页面。讨论您的选择: http://www.snailbook.com/faq/no-passphrase.auto。 HTML

您误解了公钥认证的工作原理。您不需要访问远程主目录,只需将本地公钥放在远程 authorized_keys 文件中即可。有一个谷歌周围,有很多指南。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top