Para todos que chegam via google a esta questão porque estão procurando uma maneira de listar arquivos remotos, mas não podem acessar o servidor remoto via ssh (caso comum para servidores de backup), você pode usar 'sftp'.
As respostas acima não contemplam quando você precisa adicionar uma senha. Para incluir senha e nome de usuário em um único comando, instale o sshpass.
Para mac:$ brew install hudochenkov/sshpass/sshpass
Para Linux:sudo apt-get install sshpass -y
Então:
$ sshpass -p your_password ssh user@hostname ls /path/to/dir/
Você também pode salvar a saída:
$ sshpass -p your_password ssh user@hostname ls /path/to/dir/ > log.txt
Acho que meu uso mais frequente disso é obter o resultado ls, uma lista simples de arquivos sem todas as permissões e datas e tal, e mantê-lo em um arquivo local.
Você pode executar o que quiser dentro das aspas. Toda a saída termina em seu arquivo de texto local. Ou se você quiser executar um grande script desagradável no servidor e capturar toda a sua saída, até mesmo erros:
Como mencionado, se você puder SSH no host, poderá fazer o que quiser.
Você pode usar ssh user@hostou ssh alias(definido em ~/.ssh/config)
Exemplos
Edit: Corrigido alguns exemplos ao citar todo o comando a ser enviado. Obrigado @dave_thompson_085 por apontar para o problema.
$ ssh user@host 'ls /dir/file'
Você mencionou que não deseja receber os erros lsse o arquivo não existir.
Uma opção é apenas descartar as mensagens de erro
$ ssh user@host 'ls /dir/file 2>/dev/null'
Isso preservará o retorno também. Portanto $?, será 0 somente se o comando ls encontrar /dir/file. Isso é bom porque funciona para arquivos, pastas, links simbólicos ou qualquer coisa que possa ser listada por ls.
Outra opção é verificar se o arquivo existe antes de listar.
$ ssh user@host '[ -f /dir/file ] && ls /dir/file'
Você também pode testar e listar uma pasta, mas a sintaxe muda
A maneira como a citação e a expansão funcionam pode ser complicada. Se você usar aspas duplas fora do comando principal (em vez de aspas simples como acima), as variáveis serão expandidas ANTES de conectar o ssh, a menos que você escape do $. Normalmente é mais fácil usar aspas simples para evitar isso, mas sua milhagem pode variar. Algumas vezes você precisa de coisas para expandir localmente E remotamente, o que pode ser complicado.
Você sempre pode fazer isso:
Isso fará o SSH no host, executará ls, despejará a saída de volta para você e desconectará imediatamente.
Para listar todos os arquivos em um diretório:
Para algo como encontrar diretório/caminho -ls
Para todos que chegam via google a esta questão porque estão procurando uma maneira de listar arquivos remotos, mas não podem acessar o servidor remoto via ssh (caso comum para servidores de backup), você pode usar 'sftp'.
Exemplo:
Inicie uma sessão interativa em um diretório remoto específico:
Sim. SSH e faça um
ls
:Você pode facilmente criar um script para ser mais flexível ou usar os
scp
usos da sintaxe host:path.As respostas acima não contemplam quando você precisa adicionar uma senha. Para incluir senha e nome de usuário em um único comando, instale o
sshpass
.Para mac:
$ brew install hudochenkov/sshpass/sshpass
Para Linux:
sudo apt-get install sshpass -y
Então:
$ sshpass -p your_password ssh user@hostname ls /path/to/dir/
Você também pode salvar a saída:
$ sshpass -p your_password ssh user@hostname ls /path/to/dir/ > log.txt
Em python3:
Acho que meu uso mais frequente disso é obter o resultado ls, uma lista simples de arquivos sem todas as permissões e datas e tal, e mantê-lo em um arquivo local.
Você pode executar o que quiser dentro das aspas. Toda a saída termina em seu arquivo de texto local. Ou se você quiser executar um grande script desagradável no servidor e capturar toda a sua saída, até mesmo erros:
Como mencionado, se você puder SSH no host, poderá fazer o que quiser.
Você pode usar
ssh user@host
oussh alias
(definido em~/.ssh/config
)Exemplos
Edit: Corrigido alguns exemplos ao citar todo o comando a ser enviado. Obrigado @dave_thompson_085 por apontar para o problema.
Você mencionou que não deseja receber os erros
ls
se o arquivo não existir.Uma opção é apenas descartar as mensagens de erro
Isso preservará o retorno também. Portanto
$?
, será 0 somente se o comando ls encontrar /dir/file. Isso é bom porque funciona para arquivos, pastas, links simbólicos ou qualquer coisa que possa ser listada por ls.Outra opção é verificar se o arquivo existe antes de listar.
Você também pode testar e listar uma pasta, mas a sintaxe muda
Você pode encadear e testar para QUALQUER também
Você também pode apenas verificar se o item existe e nada mais
Você pode querer incluir um teste para links simbólicos
[ -L /my/target ]
também.Você pode executar códigos condicionais remotamente
Ou localmente se você mover os comandos para fora da string de comando
A maneira como a citação e a expansão funcionam pode ser complicada. Se você usar aspas duplas fora do comando principal (em vez de aspas simples como acima), as variáveis serão expandidas ANTES de conectar o ssh, a menos que você escape do
$
. Normalmente é mais fácil usar aspas simples para evitar isso, mas sua milhagem pode variar. Algumas vezes você precisa de coisas para expandir localmente E remotamente, o que pode ser complicado.