Percebo que, ao fazer one-liners por meio ssh
de um servidor Linux, o valor de ~
permanece o valor do diretório inicial do usuário local , não o 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 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 valia a pena tentar.
Não tenho nenhum problema em procurar .ssh/config
o nome de usuário quando estou fazendo one-liners, se necessário, mas a incapacidade de usar ~
em scripts é bastante inconveniente. Além de analisar ~/.ssh/config
o nome de usuário, existe alguma maneira de contornar essa limitação? O último exemplo mostra que posso supor que estamos em seu diretório inicial e fazer referência a coisas relativas a isso, mas prefiro chamar explicitamente o diretório, se possível.
Como posso fazer referência ao diretório inicial do usuário por meio de oneliners SSH, sem analisá ~/.ssh/config
-lo localmente?
Testado no sistema local Kubuntu 14.04 e nos sistemas remotos Ubuntu Server 12.04, 14.04 e RHEL 6.5.
Você só precisa escapá-lo para que seu shell local não o expanda:
ou
Isso deve funcionar.