Como copiar links simbólicos como links simbólicos de uma máquina para outra?

13

Vamos supor que eu tenho dois sistemas idênticos. No primeiro sistema, criei um link simbólico. No segundo, eu quero copiar esse link simbólico via sftp e o link simbólico funcionará da mesma maneira (por exemplo, se o link simbólico for vinculado a /etc/, após copiá-lo, apenas o link simbólico será copiado e apenas o link simbólico (não os arquivos vinculados))

Alguma idéia de como eu posso fazer isso / se eu posso fazer isso? Eu quero copiar o link simbólico, nada mais; apenas a referência.

TheHidden
fonte
não funciona como você já descreve?
mikeserv
1
sftpnão vai deixar você fazer isso. rsyncpode, como podessh cp ...
roaima
O que estou tentando obter é copiar sobre o mapa simbólico ... não quero os arquivos ... só quero o código que diz FOLDER> ETC ... só quero criar um link simbólico do servidor e mover -lo para o servidor de sua necessidade em ... im tentando cortar fora de um arquivo fechado
TheHidden
1
@roaima ssh cp? como no scp? como?
technical_difficulty

Respostas:

12

Se você aumentar o link simbólico, poderá copiar o tarball para a máquina remota da maneira que desejar. Ao desatá-lo, você descobrirá que apenas copiou o link simbólico e nada mais. Por exemplo:

Para testar isso, primeiro criei um arquivo de texto.

echo this is a test > file.txt

Em seguida, crie um link simbólico para o arquivo e comprima-o em um tar gzip.

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

Transfira esse arquivo para sua outra máquina e descompacte-o:

tar xzvf tarball.tar.gz

Você descobrirá que o link simbólico está lá, mas não o arquivo original que ele apontou.

Obviamente, se você deseja transferir o arquivo original e o link simbólico, preservando o relacionamento, pode colocá-los no tarball e eles serão transferidos, e o link simbólico ainda deve estar corretamente apontado para o arquivo original quando você descompactar o tarball no local de destino.

mkrufky
fonte
isso é bastante interessante, mas, infelizmente, acho que não vai me ajudar, não tenho controle sobre o escravo. Todos esses SFTPs são feitos via APIs para bloquear pastas, mas estou tentando invadir a caixa usando links simbólicos, porque há um pouco de uma emergência e eu preciso obter acesso do mestre que carrega as atualizações selecionadas, por motivos de segurança, os arquivos que eu envio não são executados, mas se eu posso ligar um link simbólico, posso injetar código em um processo já existente (teoricamente) substituindo o arquivo pelo link simbólico ... mas para fazer isso eu preciso copiar um link simbólico mais de 100% bruto :(
TheHidden 10/15/15
@ user1779617 Ainda não está claro o que você quer dizer com "escravo" e "mestre", porque você parece usar os dois termos para servidor e cliente de forma intercambiável. Se você precisar criar um link simbólico no servidor , poderá fazê-lo com o SFTP; no entanto, dependendo da configuração, talvez não seja possível olhar para fora da região chroot do daemon SFTP. Por favor, consulte a página de manual do sftp( linux.die.net/man/1/sftp )! Existe o comando symlinkespecificamente para o que você parece precisar.
Polemon 11/11/2015
5

Não está claro como exatamente você deseja lidar com o link simbólico. Pelo que entendi, você deseja recriar o link simbólico no outro sistema. Os links simbólicos dependem do sistema de arquivos, o protocolo usado para copiar arquivos deve estar ciente disso. Um bom exemplo é usar rsynccom a -aopção

mais especificamente, a -lopção, mas -aprovavelmente é o que você deseja.

Ele recriará links simbólicos sem puxar os alvos (sem referência aos links).

polemon
fonte
Eu vejo hm, então não haveria maneira de copiá-lo como um arquivo e manter o link? Eu só tenho a capacidade de mover diretamente os arquivos. Eu esperava criar o link simbólico no sistema idêntico e copiá-lo ou estou apenas com muita esperança?
TheHidden 10/11/2015
@ user1779617 em primeiro lugar: quando você diz "mover", você realmente quer dizer "mover" ou "copiar"? Como "mover" implica a exclusão do arquivo original (esse também foi o motivo pelo qual eu editei sua pergunta). Segunda coisa: você está limitado a um protocolo de transferência de arquivos específico (apenas como FTP)? Nesse caso, devemos discuti-lo dentro do escopo disso e dos sistemas de arquivos dos quais estamos falando.
Polemon
Somente SFTP, faça o download apenas da máquina que precisa do link simbólico, por isso quero dizer copiar somente do mestre para o SFTP escravo e a conexão sftp é somente do escravo.
TheHidden
@ user1779617 Suponho que você queira dizer "cliente" (escravo) e "servidor" (mestre). sftpatravessará subdiretórios com a -ropção, mas não seguirá os links simbólicos, pois abstrai os sistemas de arquivos. sftpsuporta a criação de links simbólicos no host. Você deve pelo menos tentar fazer o download apenas o link simbólico (quando a ligação simbólica é ~/etc-> /etc/fazer get etcsem a fuga /) e ver o que acontece. Depende do FS do servidor e do cliente. Edite sua pergunta original de acordo!
Polemon #
3

Eu sei que @polemon já respondeu isso.

Mas fazer o meu pouco para uma solução rápida.

Eu tive que fazer man rsync para saber qual switch eu quero usar ...

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

No entanto, no seu caso, você precisa garantir que os links não estejam quebrados!

HarshaD
fonte
2

Uma solução muito fácil (para o diretório inicial):

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

ou

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

por exemplo

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

para fornecer um .bashrc com link simbólico para outro destino (por exemplo, rede).

Paul Neuwirth
fonte
0

As outras respostas já explicam como transferir um link simbólico para outra máquina. No entanto, independentemente de como você transferir o link simbólico, você não poderá usá-lo para acessar um arquivo /etc/via FTP, SFTP, SCP, SSH ou qualquer outra maneira. Esses serviços tendem a ser chroot para um determinado diretório ou impedidos de fornecer acesso a arquivos que não foram explicitamente compartilhados. Obviamente, sempre há maneiras de solucionar isso em sistemas mais antigos, mas essas vulnerabilidades tendem a ser corrigidas e atualizadas assim que são encontradas. Sinto muito, não acho que o que você queira fazer seja possível.

mkrufky
fonte
justo o suficiente, pelo menos eu tentei, eu acho :(
TheHidden 10/15