使用pscp自动接受rsa指纹

时间:2011-10-03 17:54:16

标签: amazon-ec2 rsa fingerprint

当您使用pscp将文件发送到单个计算机时并不是什么大问题,因为您将获得一次rsa指纹提示,之后再也不会。但是如果你想连接200台机器,你绝对不想输入“是”200次......

我在Windows机器上使用pscp,我真的不关心指纹,我只想接受它。每次重启机器时,我都在使用Amazon EC2并更换指纹....

如果有办法使用pscp或其他工具来避免它,请告诉我!!!

谢谢!

4 个答案:

答案 0 :(得分:6)

请参阅Putty won't cache the keys to access a server when run script in hudson

在Windows上,您可以在命令前使用前缀echo y |,每次 盲目 接受任何主机密钥。但是,更安全的解决方案是第一次以交互方式运行,或生成可在任何客户端计算机上运行的.reg文件。

答案 1 :(得分:4)

我不完全同意最后的答案。第一次接受SSH密钥时,您对远程主机一无所知,因此自动接受它并没有任何区别。

我要做的是在您第一次连接主机时自动接受密钥。我已经读过像yes yes | ssh user@host这样的东西可以工作,但事实并非如此,因为SSH不是从stdin读取,而是从终端读取。

首次连接时,通过以下ssh选项(适用于scp和ssh:

scp -oStrictHostKeyChecking=no user@host1:file1 user@host2:file2

这个命令会在你第一次运行时添加密钥,但是,正如Eric所说的那样,一旦你接受密钥就这样做是危险的(中间的人是不冷静的)。如果我是你,我会将它添加到签入~/.ssh/known_hosts的脚本中,如果该主机已有一行,在这种情况下我不会添加该选项。另一方面,如果没有线路,我会这样做;)。

如果您正在处理known_hosts的加密版本,请尝试使用

ssh-keygen -F hostname

这是我实际使用的东西(函数接收以下参数:user,host,source_file)

deployToServer() {
    echo "Deployng to $1@$2 from $3"
    if [ -z "`cat ~/.ssh/known_hosts | grep $2`" ] && [ -z "`ssh-keygen -F $2`" ]
    then
        echo 'Auto accepting SSH key'
        scp -oStrictHostKeyChecking=no $3* $1@$2:.
    else
        scp $3* $1@$2:.
    fi
}

希望这有帮助;)

答案 2 :(得分:1)

如果只是重新启动或停止/启动实例,则主机ssh密钥指纹不应更改。如果是,那么实例/ AMI配置不正确或其他(恶意?)正在进行。

设置好EC2 AMI以在首次启动时创建随机主机ssh密钥。最流行的AMI会将指纹输出到控制台输出。为了安全起见,您应该通过EC2 API(命令行工具或控制台)请求实例控制台输出,并将其与ssh提示符中的指纹进行比较。

通过说“你不关心指纹”,你说你不关心加密自己和实例之间的流量,你和实例之间的任何人都可以看到这种通信。甚至可以让中间人接管ssh会话并获得控制您实例的权限。

使用Linux上的ssh,您可以使用命令行或配置文件选项关闭ssh指纹检查。我不愿意发布如何做到这一点,因为它不推荐,并严重降低你的连接的安全性。

更好的选择是让您的实例将自己的主机ssh密钥设置为您知道的秘密值。您可以将主机ssh密钥的公共端保存在已知主机文件中。通过这种方式,您的流量是加密且安全的,并且您无需在连接到自己的计算机时不断回答有关指纹的提示。

答案 3 :(得分:0)

我创建了一个包含以下命令的expect文件:

spawn ssh -i ec2Key.pem ubuntu @ ec2IpAddress 期待“你确定要继续连接(是/否)?” {send“yes \ n”} 交互

我能够在不禁用rsa指纹的情况下进入ec2控制台。我的机器已添加到此ec2的已知主机中。

我希望它有所帮助。