我注意到当通过ssh执行一行到Linux服务器时, ~的值仍然是本地用户主目录的值,而不是远程用户的主目录。 见证本地用户dotancohen和远程用户dotancohen :
$ 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
请注意,即使在连接详细信息中指定用户名,甚至使用$HOME代替~也没有帮助。 不是我期望他们,但这是值得一试的。
如果需要的话,我可以在.ssh/config查找用户名,但是在脚本中不能使用~是非常不方便的。 除了parsing~/.ssh/config的用户名,有没有办法解决这个限制? 最后一个例子表明,我可以假设我们在他的主目录,并参考相关的东西,但我更愿意显式调用目录,如果可能的话。
我如何通过SSH oneliners引用用户的主目录,而不用parsing本地的~/.ssh/config ?
在本地系统Kubuntu 14.04和远程系统Ubuntu Server 12.04,14.04和RHEL 6.5上testing。
您只需要将其转义,以使您的本地shell不会扩展它:
ssh beta ls \~/.ssh
要么
ssh beta 'ls ~/.ssh'
这应该工作。