Jak skopiować dowiązania symboliczne jako dowiązania symboliczne z jednego komputera do drugiego?

13

Załóżmy, że mam dwa identyczne systemy. W pierwszym systemie stworzyłem dowiązanie symboliczne. Na drugim chcę skopiować to dowiązanie symboliczne przez sftp, a dowiązanie symboliczne powinno działać tak samo (tj. Jeśli dowiązanie symboliczne do /etc/, po skopiowaniu, tylko skopiowane zostanie tylko dowiązanie symboliczne i tylko dowiązanie symboliczne (nie połączone pliki))

Wszelkie pomysły na to, jak to zrobić / czy mogę to zrobić? Chcę tylko skopiować link symboliczny, nic więcej; tylko odniesienie.

Ukryte
źródło
to nie działa tak, jak już opisałeś?
mikeserv
1
sftpnie pozwolę ci tego zrobić. rsyncmoże, jak to możliwessh cp ...
roaima
To, co próbuję osiągnąć, to kopiowanie przez mapę symboliczną ... Nie chcę plików .. Chcę tylko fragmentu kodu, który mówi FOLDER> ETC ... Chcę tylko utworzyć dowiązanie symboliczne z serwera i przenieść na serwer jest potrzebny ... próbuję włamać się do załączonego pliku
TheHidden
1
@roaima ssh cp? jak w scp? w jaki sposób?
Technical_difficulty

Odpowiedzi:

12

Jeśli utworzysz link symboliczny, możesz skopiować go na zdalny komputer w dowolny sposób. Kiedy to rozwiążesz, przekonasz się, że skopiowałeś tylko symboliczny link i nic więcej. Na przykład:

Aby to przetestować, najpierw utworzyłem plik tekstowy.

echo this is a test > file.txt

Następnie utwórz dowiązanie symboliczne do pliku i skompresuj go do tar gzip.

ln -s file.txt link.lnk
tar czvf tarball.tar.gz link.lnk

Prześlij ten plik na inny komputer, a następnie rozpakuj go:

tar xzvf tarball.tar.gz

Przekonasz się, że istnieje dowiązanie symboliczne, ale nie oryginalny plik, na który wskazał.

Oczywiście, jeśli chcesz przenieść zarówno oryginalny plik, jak i dowiązanie symboliczne, zachowując ich relację, możesz umieścić je oba w archiwum, a oba zostaną przeniesione, a dowiązanie symboliczne powinno nadal być poprawnie wskazywane na oryginalny plik podczas rozpakowywania tarball w miejscu docelowym.

mkrufky
źródło
jest to dość interesujące, ale niestety nie sądzę, że to mi pomoże, nie mam żadnej kontroli nad Slave, wszystkie te SFTP są wykonywane przez interfejsy API do zablokowanych folderów, ale próbuję włamać się do skrzynki za pomocą dowiązań symbolicznych, ponieważ jest trochę awaryjne i muszę uzyskać dostęp od mastera, który wypycha wybrane aktualizacje, ze względów bezpieczeństwa pliki, które wysyłam, nie wykonują, ale jeśli mogę dowiązać symbolicznie, mogę wstrzyknąć kod do już istniejącego procesu (teoretycznie), zastępując plik przez dowiązanie symboliczne ... ale aby to zrobić, muszę skopiować dowiązanie symboliczne w ponad 100% raw :(
TheHidden
@ user1779617 Nadal niejasne jest, co masz na myśli przez „slave” i „master”, ponieważ wydaje się, że używasz obu terminów zarówno dla serwera, jak i klienta zamiennie. Jeśli potrzebujesz utworzyć dowiązanie symboliczne na serwerze , możesz to zrobić za pomocą SFTP, jednak w zależności od konfiguracji możesz nie być w stanie spojrzeć poza chrootowany obszar demona SFTP. Proszę odnieść się do strony man sftp( linux.die.net/man/1/sftp )! Istnieje polecenie przeznaczone symlinkspecjalnie do tego, czego potrzebujesz.
polemon
5

Nie jest jasne, w jaki sposób chcesz poradzić sobie z dowiązaniem symbolicznym. Jak rozumiem, chcesz odtworzyć dowiązanie symboliczne w innym systemie. Dowiązania symboliczne są zależne od systemu plików, protokół używany do kopiowania plików musi o tym wiedzieć. Dobrym przykładem jest użycie rsynctej -aopcji.

dokładniej, -lopcja, ale -aprawdopodobnie jest to, czego chcesz.

Odtworzy dowiązania symboliczne bez przeciągania celów (dereferencje linków).

polemon
źródło
Widzę hm, więc nie ma sposobu, aby skopiować go jak plik i zachować link? Mam tylko możliwość bezpośredniego przenoszenia plików. Miałem nadzieję zbudować dowiązanie symboliczne na tym samym systemie i skopiować je, czy mam nadzieję?
TheHidden
@ user1779617 przede wszystkim: kiedy mówisz „przenieś”, czy w rzeczywistości masz na myśli „przenieść” czy „skopiować”? Ponieważ „przenieś” oznacza usunięcie oryginalnego pliku (był to również powód, dla którego edytowałem twoje pytanie). Po drugie: czy jesteś ograniczony do konkretnego protokołu przesyłania plików (jak tylko FTP)? Jeśli tak, powinniśmy omówić to w ramach tego i systemów plików, o których mówimy.
polemon,
Tylko SFTP, pobierz tylko z komputera, który potrzebuje dowiązania symbolicznego, więc mam na myśli kopiowanie z urządzenia nadrzędnego tylko do SFTP podrzędnego, a połączenie sftp jest tylko z urządzenia podrzędnego.
TheHidden
@ user1779617 Zakładam, że masz na myśli „klient” (slave) i „serwer” (master). sftpbędzie przechodzić przez podkatalogi podkatalogami -r, ale nie będzie podążać za dowiązaniami symbolicznymi, ponieważ abstrakuje systemy plików. sftpobsługuje tworzenie dowiązań symbolicznych na hoście. Powinieneś przynajmniej spróbować pobrać tylko dowiązanie symboliczne (gdy dowiązanie symboliczne ~/etc-> /etc/zrób get etcbez trailing /) i zobacz, co się stanie. To zależy od FS serwera i klienta. Edytuj odpowiednio swoje oryginalne pytanie!
polemon
3

Bardzo łatwe rozwiązanie (dla katalogu domowego):

tar -c SYMLINKFILE | ssh machine 'tar -x'

lub

tar -c SYMLINKFILE | ssh machine 'tar -xC /some/other/location  '

na przykład

tar -c .bashrc | ssh another_machine 'tar -x'

w celu zapewnienia umieszczenia dowiązania .bashrc w innym (np. sieci) miejscu docelowym.

Paul Neuwirth
źródło
3

Wiem, że @polemon już na to odpowiedział.

Ale robię trochę, aby szybko rozwiązać.

Musiałem zrobić man rsync, aby wiedzieć, którego przełącznika chcę użyć ...

rsync -avz -e ssh /file or sym link/to/copy/ user@ip:/dest/path/

Chociaż w twoim przypadku musisz upewnić się, że linki nie są zepsute!

HarshaD
źródło
0

Inne odpowiedzi już wyjaśniają, jak przenieść dowiązanie symboliczne do innej maszyny. Jednak bez względu na sposób przesyłania dowiązania symbolicznego nie będzie można użyć tego dowiązania symbolicznego do uzyskania dostępu do pliku /etc/przez FTP, SFTP, SCP, SSH ani w żaden inny sposób. Usługi te są zazwyczaj chrootowane do danego katalogu lub w inny sposób uniemożliwia się dostęp do plików, które nie zostały jawnie udostępnione. Oczywiście zawsze istnieją sposoby na zhackowanie tego na starszych systemach, ale takie luki są zazwyczaj łatane i aktualizowane, gdy tylko zostaną znalezione. Przepraszam, nie sądzę, że to, co chcesz zrobić, będzie możliwe.

mkrufky
źródło
W porządku, przynajmniej próbowałem Chyba :(
TheHidden