SSH Confusão de Navegação

3

Esta pode ser a pergunta mais ridícula que já fiz, mas admito que estou perplexo. Estou tentando mover alguns arquivos de um servidor remoto para minha máquina local. Estou executando o Ubuntu, obviamente. Agora, apenas para segundo plano, esta máquina tem dois usuários diferentes. Estou logado como um deles; joe. Então, quando eu clico na pasta home no Unity eu recebo minha pasta home do joe com todas as minhas subpastas e arquivos. Uma das pastas que tenho dentro joe é chamado de remoto. Inside remote é outra pasta chamada mail. Não tenho nenhum problema para fazer o login no servidor remoto usando o openssh ou putty, mas não consigo copiar os arquivos para joe / remote / mail. Por alguma razão, continuo errando o caminho e tenho tentado todas as variações que posso imaginar. Uma lista parcial seria ...

/joe/remote/mail
/remote/mail
~/joe/remote/mail
~/remote/mail
remote/mail
joe/remote/mail
/home/remote/mail
/home/joe/remote/mail
/local/home/joe/remote/mail
/local/joe/remote/mail
/local/remote/mail

Você tem a ideia. Tudo que eu tento surge com o mesmo erro: a pasta xxxx não existe. Eu acho que o que eu estou perguntando aqui é exatamente o que o openssh e putty acha que é o diretório atual na máquina local? Eu pesquisei documentação on-line e não encontrei nada que me dissesse essa informação simples e infinitamente utilizável.

Além disso, fui em frente e copiei os arquivos usando "." como o destino, que deve copiá-los para o diretório atual na máquina local. Funcionou! Mas onde eles estão? Eles não estão na raiz. Eles não estão em casa. Eles não estão no joe. Estou perdido.

Editado para adicionar que estou usando o scp para copiar os arquivos, se isso for importante.

    
por Blind Fish 12.07.2012 / 05:56

4 respostas

1

Uma linha de comando scp parece, em princípio, assim:

scp options from to

Ignore as opções por enquanto (elas são opcionais); você pode ler sobre eles usando man scp .

scp suporta nomes de arquivos locais e remotos para a parte from e to . Nomes de arquivos locais são apenas nomes regulares de arquivos ou diretórios, como:

 /home/joe/
 /home/joe/remote/mail
 /home/joe/remote/mail/inbox

Nomes de arquivos remotos consistem em duas ou três partes:

  • Um nome de usuário (opcional)
  • O nome do host remoto
  • O caminho no host remoto

Um nome de arquivo remoto é construído usando essas partes como esta

 remote-host:/path/on/remote/host
 user@remote-host:/path/on/remote/host

Se você deseja copiar todos os arquivos do diretório local "/ home / joe / remote / mail" para o diretório "/ opt / backup / joe / mail" em um segundo servidor "outro", usando o nome de usuário "admin ", você emite o seguinte comando:

 scp -r /home/joe/remote/mail admin@other:/opt/backup/joe/mail

(O -r significa cópia recursiva de diretórios)

Se você deseja copiar todos os arquivos em "/ var / spool / mail / joe /" do servidor remoto "outro", usando o nome de usuário "admin", para sua pasta local "/ home / joe / remote / mail" , você emite o seguinte comando:

 scp -r admin@other:/var/spool/mail/joe/ /home/joe/remote/mail 
    
por daniel kullmann 12.07.2012 / 10:25
2

A maior parte da confusão de uma sessão SSH pode surgir do fato de que sempre precisamos estar cientes de três locais para obter os comandos certos.

A seguir, vou me referir a @home como o lugar onde realmente estamos fisicamente sentados e a @remote como a máquina para a qual nós SSH. Assim que abrirmos uma sessão SSH na máquina remota, o terminal executará todos os comandos a seguir na máquina remota. Isso é visualizado pelo prompt:

  • admin@home:~$ : sentamos em nossa máquina home no diretório HOME

  • user@remote:~S : estamos logado como usuário em sua HOME na máquina remota

O que queremos:

Caso desejemos copiar os arquivos do controle remoto para em nossa casa, temos que estar cientes de onde nos sentamos, ou seja, em qual máquina o comando será executado:

admin@home:~$ scp user@remote:/remote_path/source.file /home_path/

executará o comando scp em nossa máquina doméstica para copiar source.file da remote_path na máquina remota para a home_path em nossa máquina doméstica.

O que provavelmente não queremos

Se nós executamos o seguinte:

admin@home:~$ ssh user@remote
user@remote:~$ scp user@remote:/remote_path/source.file /home_path/

não será exatamente o que pretendíamos, então o scp foi executado na máquina remota para copiar o source.file para o /home_path na máquina remota . Para tornar a fonte e o destino claros, emitiríamos

user@remote:~$ scp user@remote:/remote_path/source.file admin@home:/home_path/

Em seguida, source.file seria de fato copiado para home_path , mas apenas se a máquina remota (onde scp é executado) puder abrir uma sessão SSH em nossa máquina doméstica.

Poderíamos ampliar ainda mais o uso de scp para copiar arquivos de uma máquina remote1 para outra máquina remote2 por:

admin@home:~$ scp user1@remote1:/remote1_path/source.file user2@remote2:/remote2_path/

Cópia avançada usando o rsync

Como o scp tem algumas limitações, podemos usar rsync para copiar arquivos. Aqui está um exemplo de como isso seria invocado:

admin@home:~$ rsync -avze ssh user@remote:/path/source_dir/ /path/destination_dir

Isso clona exatamente todos os arquivos do controle remoto source_dir para o destination_dir em nossa máquina doméstica.

    
O
por Takkat 12.07.2012 / 09:17
0

O openssh é padronizado para o diretório inicial do usuário em questão.

Tente usar o sudo updatedb seguido por locate filename para localizar qualquer arquivo.

    
por Steve 12.07.2012 / 05:58
0

Com o scp, você precisa fornecer o nome da máquina remota como:

scp /path/to/file-to-copy joe@hostname:/home/joe/remote/mail/

Assumindo que você é SSH na máquina remota e deseja copiar para joe user em sua máquina local. hostname é o nome da sua máquina local (pode ser um IP também, mas, em ambos os casos, deve ser acessível a partir da máquina remota).

Você pode inverter a situação também (para usar com um VPS, por exemplo, de onde provavelmente sua máquina local não estará acessível) e fazer da sua máquina local:

scp login@remote-machine:/path/to/file/to/copy ~joe/remote/mail/

OBS: quando você usa o SSH em uma máquina, o terminal está na máquina remota e "não tem idéia" de qual é a sua máquina local e não pode acessá-la sem seu nome de host. Além disso, você precisa ter uma rota para acessar sua máquina local a partir da remota (você pode experimentá-la com ping em sua máquina local).

Quando você copiou os arquivos para "." eles foram copiados para o diretório que você estava naquele momento na máquina remota.

ATUALIZAÇÃO:

Hostname é apenas nome_da_máquina ou nome_da_máquina com domínio como nome_da_máquina.domínio.com, mas isso só funcionará se você puder acessar sua máquina local a partir da máquina remota (sua máquina local possui um IP público (e registro DNS) se remoto for via Internet ou algum tipo de resolução de nomes locais (DNS, por exemplo) se ambas as máquinas estiverem na mesma rede.

O nome do host também pode ser um IP se você não tiver um sistema de resolução de nomes para a sua máquina, mas a máquina estiver na mesma rede ou estiver trabalhando com IPs públicos.

Como você não pode fazer o ping da sua máquina a partir da máquina remota, eu acho que você não tem como configurá-la e você deve usar a solução invertida proposta acima não fazendo SSH para a máquina remota e copiando com SCP da sua máquina sua máquina remota está acessível (você pode fazer SSH nela).

Para explicar um ponto da sintaxe: user @ something é um login na máquina e algo precisa ser um nome de host e não um diretório. Então joe @ home / ... não alcançará nada, já que home é um diretório e você não pode entrar em um diretório.

    
por laurent 12.07.2012 / 06:41