尝试使用Ruby脚本从Amazon EC2(Ubuntu)实例远程传输或运行命令。 我无法从ruby doc中了解ssh和scp如何传递.pem文件进行身份验证
# download a file from a remote server
Net::SCP.download!("remote.host.com", "username",
"/remote/path", "/local/path",
:password => password)
我也尝试过使用命令行,但这里的问题是主机是动态的,我必须每次都验证'是'
`/usr/bin/scp -i keyfile.pem -r username@some.random.ip:/remote/path /local/path`
The authenticity of host 'some.random.ip (some.random.ip)' can't be established.
ECDSA key fingerprint is some:random:fingerprint.
Are you sure you want to continue connecting (yes/no)? yes
除了不使用命令行代码禁用SSH主机密钥检查之外,还有其他方法吗?或者,对于ruby,net-scp或net-ssh gem中是否有选项?
答案 0 :(得分:8)
我在他们的任何文档中找不到的Ruby解决方案
Net::SSH.start( hostname, username, :keys => "/path/to/keyfile.pem" ) do|ssh|
#process
end
答案 1 :(得分:2)
尝试这样的命令
ssh -o StrictHostKeyChecking=no -i keyfile.pem -r username@some.random.ip
您还可以将以下行添加到〜/ .ssh / config文件中,以避免使用-o命令行开关
Host *
StrictHostKeyChecking no
注意:您应该将*替换为您访问的远程服务器的域名模式
同样适用于scp
答案 2 :(得分:0)
要添加到naveed声明的内容,例如,如果要为Net::SCP.upload!
命令指定PEM文件,请使用:ssh
哈希键指定:keys
哈希键值:
Net::SCP.upload!("remote.host.com", "username",
"/local/path", "/remote/path", :ssh => { :keys => "/path/to/keyfile.pem" }) do |ch, name, sent, total|
...
end
我从naveed的例子和documentation看出来。