我需要通过公共database
服务器通过SSH连接到位于私有子网中的nat
服务器。只有nat
具有允许连接到database
的RSA密钥。我如何使用Net::SSH
?
我尝试过以下方法:
def ssh
Net::SSH.start(DB_SERVER_IP, DB_SERVER_USERNAME, proxy: proxy)
end
def proxy
Net::SSH::Proxy::Command.new("ssh -l #{NAT_USER} -e none #{NAT_IP} exec nc %h %p 2>/dev/null")
end
此方法确实使私有database
服务器对localhost
可见,但localhost
没有RSA密钥连接到它,并且连接失败
Permission denied (publickey).
答案 0 :(得分:0)
解决方法:
def ssh
Net::SSH.start(DB_SERVER_IP, DB_SERVER_USERNAME, proxy: proxy, key_data: [pem])
end
def proxy
Net::SSH::Proxy::Command.new("ssh -l #{NAT_USER} -e none #{NAT_IP} exec nc %h %p 2>/dev/null")
end
def pem
Net::SSH.start(NAT_IP, NAT_USER).exec!('cat ~/.ssh/the.pem')
end