Ich habe es mit expect versucht, aber es hat nicht funktioniert: es hat die Verbindung am Ende geschlossen.
Können wir ein Skript über ssh ausführen, das sich auf entfernten Rechnern anmeldet, einen Befehl ausführt und die Verbindung nicht trennt?
Also ssh auf einer Maschine, cd in ein solches und ein solches Verzeichnis und dann einen Befehl ausführen und eingeloggt bleiben.
-Jonathan
(Ich nehme an, ich habe verwendet)
#!/usr/bin/expect -f
set password [lrange $argv 0 0]
spawn ssh root@marlboro "cd /tmp; ls -altr | tail"
expect "?assword:*"
send -- "$password\r"
send -- "\r"
interact
linux
ssh
command-line-interface
automation
Jonathan
quelle
quelle
Antworten:
Fügen Sie ein
; /bin/bash
an das Ende Ihrer Befehlszeile auf der Remote-Seite? Das ist:Noch besser ist es, die .bashrc-Datei von root so zu ändern, dass sie ungefähr so lautet:
:)
quelle
-i
zu dieser Bash hinzufügen .ssh -t
, eine Pty zuzuweisen.Wenn Sie in Python damit einverstanden sind, hat pexpect ein Beispiel, das fast genau das tut, wonach Sie fragen:
Um dies mit ssh anstelle von ftp zu tun, möchten Sie einen Code, der dem folgenden ähnelt (die Beispieldateien in pexpect enthalten viel mehr Details und Informationen, aber hier sind die Grundlagen):
Versteht mich nicht falsch, ich LIEBE es zu erwarten (besonders Autoexpect), aber Python ist für mich einfach sooo viel einfacher zu lernen.
quelle
Der wahrscheinlich einfachste und sauberste Weg, um in einen Server zu ssh, eine interaktive Shell zu erzeugen und Befehle in dieser Shell auszuführen, besteht darin, eine benutzerdefinierte rc-Datei für bash zu erstellen.
Geben Sie in Ihrer benutzerdefinierten bashrc-Datei auf dem Server zuerst die Standarddatei ein und fügen Sie dann Ihre benutzerdefinierten Befehle hinzu, z
~ / .bashrc_custom:
Sie können dann Ihre SSH-Sitzung wie folgt starten:
Die
-t
Option erzwingt eine Pseudotty-Zuweisung, sodass Dinge wie die Tab-Vervollständigung funktionieren.Die
--rcfile
Option gibt an, welche RC-Datei anstelle der Standarddatei geladen werden soll. Wichtig: Um erkannt zu werden, müssen Sie in der Befehlszeile vor den Optionen mit einem einzelnen Zeichen "Argumente mit zwei Strichen" eingeben.Das
-i
Argument zu / bin / bash dient dazu, eine interaktive Shell aufzurufen.quelle
Wenn jemand Informationen darüber haben möchte, was im Hintergrund passiert, sollten Sie sich das sshd-Handbuch ansehen:
https://www.freebsd.org/cgi/man.cgi?sshd(8)#LOGIN_PROCESS
quelle
Sie sollten es generell vermeiden, ssh auf diese Art und Weise zu verwenden, da es seinen Zweck verfehlt.
Mach ein
um zu sehen, ob Ihr Schlüssel im Pool der aktiven ssh-Sitzung aufgeführt ist, oder fügen Sie ihn selbst hinzu (mit ssh-add).
quelle