Próbowałem tego z oczekiwaniem, ale to nie zadziałało: na końcu zamknęło połączenie.
Czy możemy uruchomić skrypt za pośrednictwem ssh, który zaloguje się do zdalnych komputerów, uruchomi polecenie i nie rozłączy się?
Więc ssh na komputerze, cd do takiego i takiego katalogu, a następnie uruchom polecenie i pozostań zalogowany.
-Jonathan
(oczekuję, że użyłem)
#!/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
źródło
źródło
Odpowiedzi:
Dodać a
; /bin/bash
na końcu linii poleceń po drugiej stronie? To jest:Co więcej, zmień .bashrc roota na coś takiego:
:)
źródło
-i
do tej bash.ssh -t
przydzielić pty.Jeśli nie masz nic przeciwko robieniu tego w Pythonie, pexpect ma przykład, który robi prawie dokładnie to, o co prosisz:
Aby to zrobić za pomocą ssh zamiast ftp, potrzebujesz kodu podobnego do następującego (pliki przykładowe w pexpect zawierają znacznie więcej szczegółów i informacji, ale oto podstawy):
Nie zrozum mnie źle, KOCHAM się spodziewać (szczególnie autoekspektu), ale python jest o wiele łatwiejszy do zrozumienia.
źródło
Prawdopodobnie najłatwiejszym i najczystszym sposobem na ssh na serwer, odrodzenie interaktywnej powłoki i wykonywanie poleceń wewnątrz tej powłoki jest utworzenie niestandardowego pliku rc dla bash.
W niestandardowym pliku bashrc na serwerze najpierw źródłowy plik, a następnie dodaj własne polecenia, np
~ / .bashrc_custom:
Następnie możesz rozpocząć sesję SSH w następujący sposób:
Ta
-t
opcja wymusza alokację pseudo-tty, aby rzeczy takie jak uzupełnianie tabulacji działały.Do
--rcfile
opcja określa, który plik rc załadować zamiast jednej domyślnej. Ważne: aby możliwe było rozpoznanie, należy w wierszu poleceń wstawić „argumenty podwójnego myślnika”.-i
Argument / bin / bash ma powołać interaktywną powłokę.źródło
Jeśli ktoś chce informacji o tym, co dzieje się w tle, zapoznaj się z instrukcją sshd:
https://www.freebsd.org/cgi/man.cgi?sshd(8)#LOGIN_PROCESS
źródło
Zasadniczo powinieneś unikać używania ssh w ten sposób, ponieważ nie pozwala to na osiągnięcie celu.
Zrób
aby sprawdzić, czy klucz znajduje się na liście w aktywnej puli sesji ssh, czy też dodaj go samodzielnie (za pomocą ssh-add).
źródło