Wie interaktiven SSH-Sitzung
Guten Tag alle
Muss ich ausführen-Befehl auf der linux Maschine dieser Befehl ist interaktiv
Befehl.
Interaktiven Befehl bedeutet, dass eine Eingabe erfordern, wie [ja , Nein] oder Passwort
zweimal
meiner realen Fall ist.
Ich erstelle ein Skript-Befehle ausführen und erhalten Sie die Ausgänge erfolgreich.
aber einige Server Anmeldung Passwort abgelaufen ist, so brauche ich für die Interaktion mit
server versenden Sie das aktuelle Passwort + das neue Kennwort ein(zweimal)
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:
Hinweise::
- Ich bin mit Ruby 1.9.2
- Ich habe kein problem in dem ausführen-Befehl im normal Fall
- bitte, ich habe zu vermeiden workarounds wie (echo "pass" | ssh -S), um mir das passieren, alle anderen interaktiven Situationen.
- Ich bin mit 'net/ssh' libs
- Das Skript ist im Anhang http://king-sabri.net/files/LinuxHWScanner.rb
- Ich habe versucht mit "net/ssh/telnet" und es hilft nicht
- Einige sagen berät mit 'rake/remote_task' ist die Lösung, aber ich kann nicht verstehen, wie es funktioniert in meinem Fall
wenn Sie brauchen mehr Einfachheit, hier einen einfachen code, wenn Sie es machen, was funktioniert ich werde es lösen meine Vorherige Frage
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
- Sie werden wahrscheinlich brauchen, um die
request_pty()
Funktion führen Sie diepasswd(1)
Programm. - Sie beraten über request_pty() in meinem Fall ?
- Ich war falsch: aus der Lektüre der Shadow Password Suite-source-code sehe ich, dass
gpasswd(1)
,login(1)
,su(1)
, undsulogin(8)
alle benötigen, um ausgeführt werden, von einem terminal aus. Aber nichtpasswd(1)
. Gehen Abbildung. - Aber Sie hatten Recht in dem Sinne, dass, wenn es automatisch aufgerufen
passwd
auf login, dann der einzige Weg, um den Begrüßungstext zu Fragen, die Sie zum ändern der pass istrequest_pty
. afaik..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sowas?
Dieser ist schmutzig, aber die Arbeit für beide bei vorzeitiger auf-Ablauf-prompt und auf
passwd
Ausstellung:New
undnew
im 2. und 3. prompt sind von anderer Fall (das Ding variiert zwischen den Distributionen). Ändern Sie einfach die Bedingung(en) in on_data Rückruf.