确定进行 SCP 时是否需要“是”

确定进行 SCP 时是否需要“是”

我正在编写一个 Groovy 脚本来执行 SCP。请注意,我还没有运行它,因为其余部分尚未完成。现在,如果您是第一次执行 SCP,则必须验证指纹。以后就不需要了。

我目前的解决方案是,因为我有 3 次机会输入密码,而我实际上只需要 1 次(脚本不会输错密码……如果输错了,就是输错了!),所以将“是”作为第一次密码尝试。这样,它会在必要时接受指纹,并使用正确的密码作为第一次尝试。如果不需要,它会将“是”作为第一次尝试,将“正确”作为第二次尝试。

但是,我觉得这不是一个很可靠的解决方案,而且我知道如果我是客户,我不希望在输出中看到“密码错误”。尤其是如果由于其他原因失败,这将是一个令人非常恼火的错误名称。

以下是相关脚本的相应部分。我愿意接受任何涉及以不同方式使用 scp(或完成文件传输)的策略。我只想完成工作。我甚至愿意接受 shell 脚本,尽管我不是这方面的佼佼者。

def command = []
command.add('scp')
command.add(srcusername + '@' + srcrepo + ':' + srcpath)
command.add(tarusername + '@' + tarrepo + ':' + tarpath)

def process = command.execute()
process.consumeOutput(out)
process << "yes" << LS << tarpassword << LS
process << "yes" << LS << srcpassword << LS
process.waitfor()

非常感谢,

glowcoder

答案1

man ssh_config

“……”严格主机密钥检查如果将此标志设置为yes'', ssh(1) will never automatically add host keys to the ~/.ssh/known_hosts file, and refuses to connect to hosts whose host key has changed. This provides maximum protection against trojan horse attacks, though it can be annoying when the /etc/ssh/ssh_known_hosts file is poorly main‐ tained or when connections to new hosts are frequently made. This option forces the user to manually add all new hosts. If this flag is set to“no”,ssh 将自动将新主机密钥添加到用户已知的主机文件中。如果将此标志设置为“ ask'', new host keys will be added to the user known host files only after the user has confirmed that is what they really want to do, and ssh will refuse to connect to hosts whose host key has changed. The host keys of known hosts will be verified automatically in all cases. The argument must beyes”,no'', or则询问”。 默认为“询问”。 “……”

答案2

非常不安全的答案:http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

(基本上,提供ssh命令选项指令,使其查看/dev/null主机密钥并忽略它以前从未见过密钥的事实 - 解决问题,但抛弃任何安全预防措施并使您容易受到密码或私钥收集攻击)

答案3

为什么不为 ssh 编写一个包装器,基本上执行 ssh-keyscan,然后检查 ~/.ssh/known_hosts 中是否存在主机密钥?如果它不在 known_hosts 中,则期望答案是“是”。

相关内容