Zdalnie uruchamiać skrypt na Uniksie, uzyskiwać dane wyjściowe lokalnie?

44

Muszę uruchomić skrypt (Tcl lub cokolwiek innego) na zdalnej maszynie uniksowej z (lokalnej) powłoki poleceń Windows i chcę, aby stdout / stderr skryptu pojawił się w Windows CLI. Przydałby się również kod wyjścia.

Czy jest to możliwe przy użyciu ssh (putty)? Lub w jakikolwiek inny sposób?

Dzięki!

Cristi Diaconescu
źródło

Odpowiedzi:

43

Jest to ustawienie domyślne dla SSH. Jeśli chcesz przekierować wyjście zdalnie, umieść symbol przekierowania (zwykle „>”) w cudzysłowach poleceń.

Na przykład:

ssh remote_host "ls > /tmp/file_on_remote_host.txt"

Aby zapisać wyniki lokalnie na hoście Windows,

ssh remote_host "ls" > .\file_on_local_host.txt

Aby zdalnie połączyć stderr i zapisać go oraz stdout lokalnie,

ssh remote_host "ls 2>&1" > .\combined_output_on_local_host.txt
kmarsh
źródło
Czy można to zrobić za pomocą putty.exe? To znaczy działa jako „normalny” program CLI, w przeciwieństwie do domyślnego, który ma emulować terminal.
Cristi Diaconescu
Tak zrobiłem, wkleiłem do systemu Windows 2003 i uruchomiłem wiersz poleceń. Na hoście zainstalowano wersję HP serwera SSH w celu obsługi narzędzi administracyjnych systemu. Jeśli masz tylko klienta SSH, wszystko działa w systemie zdalnym.
kmarsh
1
Działa to również na komputerze lokalnym innym niż Windows.
shiri
Z wyjątkiem ścieżki odwrotnego ukośnika, tak.
kmarsh
20

To, czego szukałem, to side-kick putty , plink.exe . W przeciwieństwie do putty, która działa jak emulator terminala, plinkdziała jak normalny (nieinteraktywny) program CLI.

Korzystając z niego, mogłem to zrobić cmd.exei zapisać lokalnie dane wyjściowe polecenia zdalnego.

\> plink remote_host "ls -l" > log.txt

Co najlepsze, działa to zarówno dla ssh, jak i telnet !

Tylko w celach informacyjnych są dostępne opcje:

PuTTY Link: command-line connection utility
Release 0.59
Usage: plink [options] [user@]host [command]
       ("host" can also be a PuTTY saved session name)
Options:
  -V        print version information and exit
  -pgpfp    print PGP key fingerprints and exit
  -v        show verbose messages
  -load sessname  Load settings from saved session
  -ssh -telnet -rlogin -raw
            force use of a particular protocol
  -P port   connect to specified port
  -l user   connect with specified username
  -batch    disable all interactive prompts
The following options only apply to SSH connections:
  -pw passw login with specified password
  -D [listen-IP:]listen-port
            Dynamic SOCKS-based port forwarding
  -L [listen-IP:]listen-port:host:port
            Forward local port to remote address
  -R [listen-IP:]listen-port:host:port
            Forward remote port to local address
  -X -x     enable / disable X11 forwarding
  -A -a     enable / disable agent forwarding
  -t -T     enable / disable pty allocation
  -1 -2     force use of particular protocol version
  -4 -6     force use of IPv4 or IPv6
  -C        enable compression
  -i key    private key file for authentication
  -noagent  disable use of Pageant
  -agent    enable use of Pageant
  -m file   read remote command(s) from file
  -s        remote command is an SSH subsystem (SSH-2 only)
  -N        don't start a shell/command (SSH-2 only)
  -nc host:port
            open tunnel in place of session (SSH-2 only)
Cristi Diaconescu
źródło
3

Tak, jeśli użyjesz klienta putty ssh, zobaczysz dane wyjściowe z wiersza poleceń, które wygeneruje Twój skrypt. Aby uzyskać kod zakończenia po uruchomieniu skryptu, wpisz:

echo $?
znak
źródło
1

Innym sposobem pobrania pliku dziennika na maszynę z systemem Windows jest: - zamontowanie Windows m / c w systemie Unix (w zależności od wersji UNIX, może to być możliwe przy użyciu serwera Samba) - uruchomienie skryptu z systemu Windows za pomocą dowolnego klienta zdalnego - Zaloguj się do skryptu podłączonego katalogu

Możesz zobaczyć wynik na żywo, jeśli otrzymasz UNIX-owy odpowiednik taila dla Windows .

James
źródło
0

Jeszcze jedna odpowiedź:

Zapisz wszystkie polecenia linuxa w pliku cmdlist.txt i użyj poniższego polecenia.

plink.exe -ssh -pw passwd [email protected] output.txt

passwd == hasło do logowania do urządzenia

uname == nazwa użytkownika dla loginu urządzenia

1.2.3.4 == adres IP urządzenia

Po wykonaniu tego polecenia wszystkie polecenia cmdlist.txt zostaną wykonane na urządzeniu zdalnym, a dane wyjściowe zostaną zapisane w pliku o nazwie output.txt

Upewnij się, że plik plink.exe i cmdlist.txt znajdują się w tym samym katalogu, a Twój komunikat dos skierowany jest do tego samego katalogu.

manjesh23
źródło