当您使用pscp将文件发送到单个计算机时并不是什么大问题,因为您将获得一次rsa指纹提示,之后再也不会。但是如果你想连接200台机器,你绝对不想输入“是”200次......
我在Windows机器上使用pscp,我真的不关心指纹,我只想接受它。每次重启机器时,我都在使用Amazon EC2并更换指纹....
如果有办法使用pscp或其他工具来避免它,请告诉我!!!
谢谢!
答案 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的已知主机中。
我希望它有所帮助。