Nie mogę sftp bezpośrednio do konkretnego hosta. Aby przenieść plik z mojego komputera domowego na host, muszę sftp pliku na host pośredni; ssh do hosta pośredniego; i sftp plik do ostatecznego miejsca docelowego. Czy można uniknąć takiego szaleństwa?
11
Możesz użyć opcji ProxyCommand SFTP, aby transparentnie tunelować połączenie SFTP przez połączenie SSH (nieco podobne do odpowiedzi WhiteFang34, ale zamiast stdin i stdout połączenia SSH, a nie przekazywanego lokalnego portu TCP):
(Zakładając, że host pośredni ma zainstalowany netcat jako / usr / bin / nc - jeśli nie, być może będziesz musiał znaleźć / zainstalować jakiś równoważny sposób bramkowania stdin i stdout do sesji TCP.)
Naprawdę fajne w tej opcji jest to, że możesz dodać ją do pliku ~ / .ssh / config, co czyni ją przezroczystą:
Dzięki temu wpisowi możesz używać sftp, scp i ssh do finalhost, a on automatycznie wywoła tunel. Jedyną nieprzejrzystą częścią jest to, że poprosi o dwa hasła (host pośredni, a następnie host końcowy), ale jeśli chcesz, możesz to również wyeliminować za pomocą kluczy SSH ...
źródło
exec
konieczne? (Tu działa dobrze bez tej części.)Możesz przesyłać dane do procesu ssh uruchomionego na twoim komputerze, a następnie uruchomić polecenie na maszynie pośredniej, która odczytuje stdin i przesyła je odpowiednio do sftp.
Można to zrobić w programie oneliner na lokalnej maszynie, choć cytowanie argumentów w ssh wymaga ostrożności. Jestem teraz przy telefonie, więc niestety nie mogę wpisać szczegółów. Być może ktoś inny może wypełnić tę odpowiedź jako ćwiczenie!
źródło
Zakładam, że ostateczny host jest zaporą ogniową i mogę tylko zgadywać, jakie metody można by obejść.
Na przykład - ujawnij ssh z komputera lokalnego, następnie ssh na pierwszym hoście, następnie ssh na drugim hoście i sftp z ostatniego hosta na twoim komputerze.
źródło
Powiedzmy, że A i B są pierwszym i drugim hostem. Plik do skopiowania to foo
Zamiast sftp możesz użyć następujących
kot foo | ssh A „cat -> foo”
Teraz możesz połączyć łańcuchowo 2 z nich razem
kot foo | ssh A "cat - | ssh B \" cat -> foo \ ""
źródło