ruby – 如何SSH交互式会话
发布时间:2020-12-17 02:16:17 所属栏目:百科 来源:网络整理
导读:今天是个好日子 我需要在linux机器上执行命令这个命令是交互式的 命令. 交互式命令意味着需要输入,如[是,否]或密码 两次 我的真实案例是. 我创建了一个脚本执行命令并成功获取输出. 但是有些服务器的登录密码已过期,所以我需要与之交互 服务器发送当前密码的
今天是个好日子
我需要在linux机器上执行命令这个命令是交互式的 我的真实案例是. ssh userName@10.0.0.243 userName@10.0.0.243's password: You are required to change your password immediately (password aged) Last login: Sun Aug 7 13:15:40 2011 from 10.0.0.28 WARNING: Your password has expired. You must change your password now and login again! Changing password for user userName. Changing password for userName (current) UNIX password: New UNIX password: Retype new UNIX password: 笔记:: >我正在使用Ruby 1.9.2 如果你需要更简单,这里有一个简单的代码,如果你让它工作,我会解决我以前的问题 require 'net/ssh' host = "10.0.0.106" port = 22 # SSH port user = 'root' # username pass = "123123" # password Net::SSH.start( host,user,:password => pass,:port=> port,:verbose => :error ) do |session| puts session.exec!("passwd root") end 解决方法
像这样的东西?
Net::SSH.start('10.0.0.6','not_root',:password => "test") do |ssh| ssh.open_channel do |channel| channel.on_request "exit-status" do |channel,data| $exit_status = data.read_long end channel.exec("passwd") do |channel,success| if success channel.on_data do |channel,data| # Don't really need this callback actually puts "got data: #{data.inspect}" end # You don't need this line if you're root channel.send_data("oldpassn") channel.send_data("newpassn") channel.send_data("newpassn") else puts "FAILED" end end channel.wait puts "SUCCESS" if $exit_status == 0 end end 这个是脏的,但是在过早的过期提示和passwd发布时都适用: Net::SSH.start('localhost',:password => "test") do |ssh| ssh.open_channel do |channel| channel.on_request "exit-status" do |channel,data| $exit_status = data.read_long end channel.on_data do |channel,data| puts data.inspect if data.inspect.include? "current" channel.send_data("oldpassn"); elsif data.inspect.include? "new" channel.send_data("newpassn"); end end channel.request_pty # This will just safely fail if we have already a password prompt on channel.exec("passwd"); channel.wait # Will reflect a valid status in both cases puts $exit_status end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |