当您使用 pscp 将文件发送到单台计算机时,这没什么大不了的,因为您将获得一次 rsa 指纹提示,之后再也不会。但是如果你想连接 200 台机器,你肯定不想输入“yes” 200 次......
我在 Windows 机器上使用 pscp,我真的不在乎指纹,我只想接受它。我正在使用 Amazon EC2,每次重新启动机器时指纹都会发生变化......
如果有办法避免使用 pscp 或其他工具,请告诉我!!!
谢谢!
当您使用 pscp 将文件发送到单台计算机时,这没什么大不了的,因为您将获得一次 rsa 指纹提示,之后再也不会。但是如果你想连接 200 台机器,你肯定不想输入“yes” 200 次......
我在 Windows 机器上使用 pscp,我真的不在乎指纹,我只想接受它。我正在使用 Amazon EC2,每次重新启动机器时指纹都会发生变化......
如果有办法避免使用 pscp 或其他工具,请告诉我!!!
谢谢!
请参阅在 hudson 中运行脚本时,Putty 不会缓存访问服务器的密钥
在 Windows 上,您可以echo y |
在命令前使用前缀,这将每次都盲目地接受任何主机密钥。但是,更安全的解决方案是第一次以交互方式运行,或者生成可以在任何客户端计算机上运行的 .reg 文件。
我不完全同意最后一个答案。第一次接受 SSH 密钥时,您对远程主机一无所知,因此自动接受它没有任何区别。
我要做的是在您第一次连接到主机时自动接受密钥。我读过类似的yes yes | ssh user@host
工作,但它没有,因为 SSH 不是从标准输入读取,而是从终端读取。
起作用的是在您第一次连接时通过以下 ssh 选项(它适用于 scp 和 ssh:
scp -oStrictHostKeyChecking=no user@host1:file1 user@host2:file2
这个命令会在你第一次运行它时添加密钥,但是如果像 Eric 所说的那样,一旦你接受了密钥就这样做是危险的(中间的人很不酷)。如果我是您,我会将其添加到已签入的脚本中,~/.ssh/known_hosts
如果该主机已经有一行,在这种情况下我不会添加该选项。另一方面,如果没有线路,我会这样做;)。
如果您正在处理 known_hosts 的加密版本,请尝试使用
ssh-keygen -F hostname
这是我实际使用的东西(函数接收以下参数:用户、主机、源文件)
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
}
希望这有帮助;)
如果您只是重新启动或停止/启动实例,则主机 ssh 密钥指纹不应更改。如果是这样,则说明实例/AMI 配置不正确或发生了其他事情(恶意?)。
良好的 EC2 AMI 设置为在首次启动时创建随机主机 ssh 密钥。大多数流行的 AMI 会将指纹输出到控制台输出。为了安全起见,您应该通过 EC2 API(命令行工具或控制台)请求实例控制台输出,并将其与 ssh 提示符中的指纹进行比较。
通过说您“不关心指纹”,您是在说您不关心加密您自己和实例之间的流量,并且您和实例之间的任何人都可以看到该通信。中间人甚至有可能接管 ssh 会话并获得控制您的实例的访问权限。
在 Linux 上使用 ssh,您可以使用命令行或配置文件选项关闭 ssh 指纹检查。我不愿发布如何执行此操作,因为不推荐这样做,并且严重降低了连接的安全性。
更好的选择是让您的实例将自己的主机 ssh 密钥设置为您知道的秘密值。您可以将主机 ssh 密钥的公共端保存在已知主机文件中。通过这种方式,您的流量被加密且安全,您无需在连接到自己的机器时不断回答有关指纹的提示。
我创建了一个包含以下命令的期望文件:
spawn ssh -i ec2Key.pem ubuntu@ec2IpAddress 期望“您确定要继续连接(是/否)?” {发送“是\n”}交互
我能够在不禁用 rsa 指纹的情况下通过 ssh 进入 ec2 控制台。我的机器被添加到这个 ec2 的已知主机中。
我希望它有帮助。