Você só precisa escapar para que seu shell local não o expanda:
ssh beta ls \~/.ssh
ou
ssh beta 'ls ~/.ssh'
Isso deve funcionar.
Noto que ao fazer one-liners via ssh
em um servidor Linux, o valor de ~
permanece como o valor do diretório inicial do usuário local , não do diretório inicial do usuário remoto. Testemunhe o usuário local dotancohen
e o usuário remoto atwood
:
$ whoami
dotancohen
$ ssh beta whoami
atwood
$ ssh beta ls ~/.ssh
ls: cannot access /home/dotancohen/.ssh: No such file or directory
$ ssh beta ls $HOME/.ssh
ls: cannot access /home/dotancohen/.ssh: No such file or directory
$ ssh atwood@beta ls ~/.ssh
ls: cannot access /home/dotancohen/.ssh: No such file or directory
$ ssh beta ls /home/atwood/.ssh
authorized_keys
$ ssh beta ls .ssh
authorized_keys
Observe que até mesmo especificar o nome de usuário nos detalhes da conexão e até mesmo usar $HOME
no lugar de ~
não ajudou. Não que eu esperasse, mas valeu a pena tentar.
Eu não tenho nenhum problema em procurar% username para o nome de usuário quando estou fazendo one-liners, se necessário, mas a incapacidade de usar .ssh/config
em scripts é bastante inconveniente. Além de analisar ~
para o nome de usuário, há alguma maneira de contornar essa limitação? O último exemplo mostra que posso supor que estamos em seu diretório pessoal e referência coisas relativas a isso, mas eu preferir explicitamente chamar o diretório, se possível.
Como posso referenciar o diretório pessoal do usuário via oneliners SSH, sem analisar ~/.ssh/config
localmente para ele?
Testado no sistema local Kubuntu 14.04 e sistemas remotos Ubuntu Server 12.04, 14.04 e RHEL 6.5.
Tags ssh