Jak przeskanować plik przez serwer pośredni?

15

Używam Ccygwin na WinXP (z powłoką bash). Chcę przesłać plik SCP z mojego lokalnego hosta na zdalną maszynę - host2. Jednak mogę SSH tylko na maszynie pośredniej - host1, a następnie SSH na host2. (Uwaga, nie mogę uzyskać dostępu do host2 z mojego localhost).

Myślałem, że tunelowanie to moja odpowiedź, ale kiedy próbuję założyć tunel

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

Ale po wpisaniu tego polecenia i naciśnięciu klawisza Enter system się zawiesza. Jaki jest właściwy sposób skonfigurowania tunelu, a następnie SCP pliku?

Dzięki, -

Dave
źródło
2
Duplikat superuser.com/questions/174160/… - podsumowanie znajduje się w mojej odpowiedzi poniżej.
jmetz
Od użytkownika Meir D : Zobacz także serverfault.com/questions/337274/…
fixer1234,
Możliwe duplikaty plików
SCP

Odpowiedzi:

17

Na to pytanie najlepiej już tutaj odpowiedziano .

Podsumowując: wstaw następujące elementy ~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh [email protected] nc %h %p 2> /dev/null

a następnie po prostu scpdo target.machine za każdym razem, gdy chcesz proxy za pośrednictwem proxy.machine!

Działa również dla ssh, więc zaoszczędzisz czas wysyłania wiadomości do komputera docelowego.

Kredyt należy przekazać użytkownikowi 24925, który odpowiedział na to w 2011 r.

jmetz
źródło
13

Aby skonfigurować tunel SSH, użyj następującego formatu:

ssh -L 9999:host2:22 user@host1

To polecenie łączy się z portem host1as useri tuneluje port 9999 na komputerze, wydając polecenie na port 22 host2. -Njest opcjonalny lub możesz użyć czegoś takiego toplub watchutrzymać sesję przy życiu w razie potrzeby.

Następnie po prostu scphost2 na localhost: 9999.

Deszcz
źródło
1
Czy po uruchomieniu tego polecenia mam się zalogować do hosta1? Ponadto po uruchomieniu tego polecenia otworzyłem kolejną powłokę bash i uruchomiłem „scp hello.txt localhost: 9999”, ale otrzymałem błąd „ssh: connect to localhost port 22: Połączenie odrzucone”. Co robię tutaj źle?
Dave
3
Po uruchomieniu tego polecenia nastąpi połączenie z hostem1, tak. Twoja scpskładnia polecenia jest jednak niepoprawna. Spróbuj tego, scp -P 9999 hello.txt user@localhost:/path/to/destination/filegdzie userjest użytkownik host2, dla którego chcesz się zalogować.
Deszcz
1
@Rain, możesz umieścić ten przykład w głównej odpowiedzi;)
dmeu
5

Od OpenSSH 7.3 możesz użyć -Jlub, -o ProxyJumpaby określić hosta bastionu / skoku. Dlatego do SSH node2za pośrednictwem node1:

ssh -J you@node1 you@node2

SCP nie ma -Jargumentu, ale zezwala -o, więc działa to:

scp -o ProxyJump=you@node1 file.txt you@node2:~
ZiggyTheHamster
źródło
3

Możesz najpierw scpować plik do hosta1, w następujący sposób:

scp file dalvarado@host1:.

Następnie zrób to, aby dostać się do host2:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

-tOpcja sshsił to przeznaczyć pseudo-terminali, które mogą sprawić, że łatwiej scpna host1 się monit o hasło / hasła. Jeśli masz ssh-agent działający i skonfigurowany wszędzie, nie powinieneś być proszony o podanie hasła / hasła.

Oferuję tę alternatywę, ponieważ jeśli użyjesz tunelu, nadal potrzebujesz dwóch poleceń: jednego, aby skonfigurować tunel, a drugiego, aby skopiować plik przez niego. To wydaje się prostsze.

Fran
źródło
Fantastyczne rozwiązanie !!!
Riccardo