Ich habe versucht, eine kleine Bibliothek mit Thor zu schreiben, um mir bei der Erstellung neuer Projekte und Websites zu helfen. Ich schrieb diese kleine Methode:Net :: SSH sudo Befehl hängt nach der Eingabe des Passwortes
def ssh(cmd)
Net::SSH.start(server_ip, user, :port => port) do |session|
session.exec cmd
end
end
unterstützen mich nur in laufender Schnell Befehle auf Remote-Servern bei Bedarf.
Das Problem ist, wenn ich einen Befehl unter sudo auf dem Remote-Ende ausführen muss, scheint das Skript nur auf mich zu hängen. Zum Beispiel bei der Ausführung dieses ...
ssh("sudo cp #{file_from_path} #{file_to_path}")
Das Skript mich nach einem Passwort
[sudo] password for user:
Aber dann die ganze Sache hhangs nach der Eingabe auffordern, wird es in.
jedem passieren würde wissen Warum hängt es genau, und was kann ich tun, um Sudo-Befehl auf einem Remote-Server unter Net :: SSH (oder eine Alternative) auszuführen?
* Hinweis: Bevor ich vorgeschlagen hatte, hatte ich ursprünglich begonnen, diese Bibliothek als Rezept unter Capistrano zu schreiben, bis ich auf Thor stieß, und dachte, es wäre eine gute Gelegenheit, es auszuprobieren. Ich bin nicht dagegen, wenn ich das ganze Ding nach Capistrano zurückschicken müsste, aber ich wäre wirklich überrascht, wenn es keine einfache Möglichkeit gäbe, sudo-Befehle auf einem entfernten Server auszuführen.
Können Sie das Passwort eingeben? 'ssh (" sudo cp # {von} # {to} <"mysupass") ' – Fosco
natürlich habe ich vergessen, die doppelten Anführungszeichen im vorherigen Kommentar zu entfernen. – Fosco
Versucht dies, aber es funktioniert nicht. Es kommt wieder mit "bash: mysupass: Keine solche Datei oder kein Verzeichnis". Ist das ein Versuch, das Passwort an die Eingabeaufforderung weiterzuleiten? Wenn ja, könnte die Idee funktionieren, aber die Syntax ist wahrscheinlich einfach aus. Ich werde sehen, was ich finden kann dass. – joeellis